最近在移植rom模块到 7.0 时, 发现之前静默安装的功能无法实现了,会报出错误:
java.lang.SecurityException: runInstallCreate from pm command asks to run as user ….. requires android.permission.INTERACT_ACROSS_USERS_FULL
然后 我就很情愿的按照他的错误, 去我的app 里面加上了这个权限。以为可以成功,加了之后一样错误不行, 然后就百度了一下, 也基本没有发现什么解决方案
相关一些 pm 等的东西,后面再发
那可能之前的安装apk代码都是以下几种:
1. Process p = Runtime.getRuntime().exec(“pm install -r apkpath”)
p.waitFor();
2. Process p = Runtime.getRuntime().exec( new String[]{ "pm", "install", "-r", apk})
p.waitFor();
3. private void SilentInstall(Context mContext,final String mypackageName, String path) {
Uri uri = Uri.fromFile(new File(path));
//Log.d(TAG, "SilentInstall path="+path);
//Log.d(TAG, "SilentInstall uri="+uri);
//Log.d(TAG, "SilentInstall packageName="+packageName);
int installFlags = 0;
PackageManager pm = mContext.getPackageManager();
try {
PackageInfo packageInfo = pm.getPackageInfo(mypackageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
if (packageInfo != null) {
installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
}
} catch (NameNotFoundException e) {
//Log.e(TAG, "NameNotFoundException = " + e.getMessage());
}
pm.installPackage(uri, new IPackageInstallObserver.Stub() {
@Override
public void packageInstalled(String packageName, int returnCode) {
// Looper.prepare();
if (returnCode == 1) {
Log.d(TAG, "install apk Success packageName:"+ packageName);
} else {
Log.d(TAG, "install fail!");
}