在Android M开发人员预览中找不到PackageInstallerActivity

Son*_*ong 6 android android-install-apk android-activity android-6.0-marshmallow

我有一个要实现的功能:以编程方式安装apk.我正在使用的代码:

ComponentName comp = new ComponentName("com.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity");
Intent newIntent = new Intent(callingIntent);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
newIntent.setComponent(comp);
Run Code Online (Sandbox Code Playgroud)

callingIntent包含来自其他服务的apk.

在Android 6.0(MPA44G,Nexus 5)上,这个意图正在崩溃.logcat的:

08-20 14:58:56.127 26222 26222 E AndroidRuntime: Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity}; have you declared this activity in your AndroidManifest.xml?
Run Code Online (Sandbox Code Playgroud)

在Lollipop设备上,上面的代码工作正常.

谷歌是否完全删除了PackageInstallerActivity?是否有任何解决方法以编程方式在Android 6.0上专门安装apk?

参考:问题3017:无法找到显式活动类com.android.packageinstaller.PackageInstallerActivity

Son*_*ong 2

我得到了答案。Intent.ACTION_INSTALL_PACKAGE 是一个更好的选择。如果您的应用程序注册为软件包安装程序,请使用下面的示例代码绕过选择器对话框:

intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(Uri.fromFile(file));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)

如果您想使用标准包安装程序,请使用以下代码:

File apkFile = new File(apkFileString);
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");  
mContext.startActivity(intent);  
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用带有 Android M 的 Nexus 5,您的解决方案给了我:`ActivityNotFoundException` (2认同)