gpt4 book ai didi

android - getLaunchIntentForPackage 对于某些应用程序为空

转载 作者:IT老高 更新时间:2023-10-28 23:23:15 26 4
gpt4 key购买 nike

我正在构建一项服务,将已安装应用程序列表从 Android TV 或 Fire TV 发送到手机。然后手机发回它想要启动的应用程序的包名称,服务将启动它。

这是创建列表的代码

public List<InstalledApp> GetInstalledApps(boolean isAndroid) {
PackageManager pm = getPackageManager();
List<ApplicationInfo> allPackages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
List<InstalledApp> userPackages = new ArrayList<InstalledApp>();

for (ApplicationInfo packageInfo : allPackages) {

if (isSystemPackage(packageInfo)) continue;

InstalledApp app = new InstalledApp();
app.setPackageName(packageInfo.packageName);
app.setAppName(pm.getApplicationLabel(packageInfo).toString());
if (!isAndroid) {
app.setIcon(pm.getApplicationIcon(packageInfo));
}
app.setAccentColor(getAccentColor(pm.getApplicationIcon(packageInfo)));


userPackages.add(app);
}

return userPackages;
}

这就是我启动应用程序的方式

public void launchApp(String packageName) {
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(packageName);
startActivity(intent);
}

在 Fire TV 上一切正常,但在 Android TV 上,许多应用的 Intent 始终为空。这些只是其中的一部分。

  • com.haystack.android
  • com.netflix.ninja
  • tv.pluto.android
  • com.bamnetworks.mlbtv

但是使用相同的代码,这些应用程序运行良好。

  • com.hulu.livingroomplus
  • com.sling
  • com.frogmind.badland
  • com.songza.tv

谁能提供任何关于我可能做错了什么的见解?

谢谢!

编辑:我也试过这个,我得到了异常(exception)

android.content.ActivityNotFoundException:未找到处理 Intent 的 Activity { cat=[android.intent.category.LEANBACK_LAUNCHER] flg=0x10000000 pkg=com.netflix.ninja }

public void launchApp(String packageName) {
Intent intent = new Intent();
intent.setPackage(packageName);
intent.addCategory("android.intent.category.LEANBACK_LAUNCHER");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}

编辑 2:

这是适合我的代码:

public void launchApp(String packageName) {
Intent intent = new Intent();
intent.setPackage(packageName);

PackageManager pm = getPackageManager();
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
Collections.sort(resolveInfos, new ResolveInfo.DisplayNameComparator(pm));

if(resolveInfos.size() > 0) {
ResolveInfo launchable = resolveInfos.get(0);
ActivityInfo activity = launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
Intent i=new Intent(Intent.ACTION_MAIN);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);

startActivity(i);
}
}

最佳答案

自 Android 11 起,一些应用程序将不会提供此信息的行为发生变化,除非您将 queries 标记添加到 AndroidManifest 之类

    <queries>
<package android:name="app.i.want.to.query" />
</queries>

请参阅 here了解更多信息

关于android - getLaunchIntentForPackage 对于某些应用程序为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30446052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com