无法在Flutter中打开其他应用程序包

nxowjjhe  于 2023-06-07  发布在  Flutter
关注(0)|答案(1)|浏览(212)

bounty还有4天到期。此问题的答案有资格获得+50声望奖励。anandyn02正在寻找一个答案从一个有信誉的来源

在我们的flutter TV应用程序中,我们正在尝试使用DeviceApps的开放式娱乐应用程序。以下方法不会打开应用程序,尽管它已安装在设备上。

DeviceApps.openApp("com.sonyliv");

我不知道为什么索尼没有打开。
注意:请忽略触摸是不是实现到这个应用程序currently.So只有点击作品.
完整片段

import 'package:device_apps/device_apps.dart';
import 'package:flutter/material.dart';
import 'dart:typed_data';

class ListAppsPage extends StatelessWidget {

  const ListAppsPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListAppsBody(),
    );
  }
}

class ListAppsBody extends StatefulWidget {
  @override
  _ListAppBodyState createState() => _ListAppBodyState();
}

class _ListAppBodyState extends State {
  List listApps = [];

  @override
  void initState() {
    super.initState();
    _getApp();
  }

   void _getApp() async{
    List _apps = await DeviceApps.getInstalledApplications(includeAppIcons: true);
    for(var app in _apps){

     // print(app.apkFilePath);

    if(!app.packageName.contains("example")) {
        var item = AppModel(
        title: app.appName,
        package: app.packageName,
        icon: app.icon,
      );
      listApps.add(item);
    }

    }

    //reloading state
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: listApps.length,
      itemBuilder: (context, int i) => Column(
        children: [
           ListTile(
            leading: Image.memory(listApps[i].icon),
            title:  Text(listApps[i].title),
            subtitle:  Text(listApps[i].package),
            onTap: (){
              DeviceApps.openApp(listApps[i].package);
      
            },
          ),
        ],
      ),
    );
  }
}

class AppModel{
  final String title;
  final String package;
  final Uint8List icon;

  AppModel({
   required this.title,
   required this.package,
   required this.icon
  });
}
yyyllmsg

yyyllmsg1#

要从同一设备上的Flutter应用中打开另一个应用,您可以使用url_launcher包。首先,您需要将这个包添加到Flutter项目的pubspec.yaml文件中。您可以在dependencies下添加以下行:

dependencies:
  flutter:
    sdk: flutter
  url_launcher: ^6.0.0

然后运行flutter pub get命令下载包。
接下来,您可以使用url_launcher包,通过包标识打开其他应用。在您的示例中,SonyLIV应用程序的包标识符是com.sonyliv。使用以下代码作为示例:

main.dart

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Open Another App'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              openApp();
            },
            child: Text('Open SonyLIV App'),
          ),
        ),
      ),
    );
  }

  void openApp() async {
    final String appUrl = 'com.sonyliv://';
    if (await canLaunch(appUrl)) {
      await launch(appUrl);
    } else {
      throw 'Could not launch $appUrl';
    }
  }
}

当您运行该应用程序时,它将显示一个标有“打开SonyLIV应用程序”的按钮。当您单击该按钮时,它将尝试在同一设备上打开SonyLIV应用程序(如果已安装)。如果没有安装,则会抛出异常。
请注意,您尝试打开的应用程序必须安装在设备上,代码才能正常工作。

相关问题