我正在构建一项服务,将安装的应用程序列表从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;
}
Run Code Online (Sandbox Code Playgroud)
这就是我启动应用程序的方式
public void launchApp(String packageName) {
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(packageName);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
在Fire TV上,一切都很完美,但在Android TV上,许多应用程序的意图始终为空.这些才一点点.
但是使用相同的代码,这些应用程序工作正常.
谁能提供任何有关我可能做错的见解?
谢谢!
编辑: …
我正在尝试使用软件包名称打开某些应用程序,为此我使用了以下代码:
public void openAppHavingPackageName(String packageName, String appName) {
try {
Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(intent);
} catch (ActivityNotFoundException e) {
Log.e(TAG, e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试打开手机中安装的应用程序时,它工作正常,但是当我尝试打开手机中没有的应用程序时,应用程序崩溃并出现以下错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference
在线上
startActivity(intent);
如您所见,我在try/catch那里有一个块,那么为什么没有捕获异常,而是运行代码导致崩溃?
android try-catch nullpointerexception android-package-managers activitynotfoundexception