qiuxiang / flutter-android-window

A flutter plugin allows you to create native android floating window.
MIT License
62 stars 19 forks source link

是否可以在 AndroidWindowApp 中运行 url_launcher? #3

Closed khjde1207 closed 2 years ago

khjde1207 commented 2 years ago
import 'package:android_window/android_window.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

class AndroidWindowApp extends StatelessWidget {
  const AndroidWindowApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: HomePage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return AndroidWindow(
      child: Scaffold(
        backgroundColor: Colors.lightGreen.withOpacity(0.9),
        body: Padding(
          padding: EdgeInsets.all(8),
          child: ElevatedButton(
              onPressed: () {
                print("onPressed");
                launch("https://github.com/");
              },
              child: Text("test open")),
        ),
      ),
    );
  }
}

错误信息 :

E/flutter (30934): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: PlatformException(NO_ACTIVITY, Launching a URL requires a foreground activity., null, null)
E/flutter (30934): #0      StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:607
E/flutter (30934): #1      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:156
E/flutter (30934): <asynchronous suspension>
E/flutter (30934): #2      launch
package:url_launcher/url_launcher.dart:99
E/flutter (30934): <asynchronous suspension>
E/flutter (30934):

有什么办法吗?

qiuxiang commented 2 years ago

看起来没办法直接在浮窗里直接使用 url_launcher,因为浮窗是以 service 运行的而不是 activity,这是 android 的限制。你可以 post 消息到 main app,从 main app 调用 url_launcher,当然,是在 main app 还在运行的情况下。

khjde1207 commented 2 years ago

谢谢