原生安卓6.0 灵奖,有系統(tǒng)簽名.下載好apk拿到path。
//系統(tǒng)簽名下靜默安裝
public static boolean systemInstall(PackageManager packageManager, String apkPath) {
Log.d(TAG, apkPath);
Class<?> pm = packageManager.getClass();
try {
if (Build.VERSION.SDK_INT >= 21) {
Class<?> Install= Class.forName("android.app.PackageInstallObserver");
Constructor<?> constructor = Install.getDeclaredConstructor();
constructor.setAccessible(true);
Object installObserver = constructor.newInstance();
Method method = pm.getDeclaredMethod("installPackage", Uri.class, Install, int.class, String.class);
method.setAccessible(true);
method.invoke(packageManager, Uri.fromFile(new File(apkPath)), installObserver, 2, null);
} else {
Method method = pm.getDeclaredMethod("installPackage", Uri.class, Class.forName("android.content.pm.IPackageInstallObserver"), int.class, String.class);
method.setAccessible(true);
method.invoke(packageManager, Uri.fromFile(new File(apkPath)), null, 2, null);
}
return true;
} catch (Exception e) {
Log.e("error", e.getLocalizedMessage());
}
return false;
}
接收安裝應(yīng)用的廣播
public class InstallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 接收安裝廣播
Intent intent2 = new Intent();
ComponentName componentName = new ComponentName(
"***", //被執(zhí)行啟動(dòng)操作app的包名
"com.**.**.MainActivity"); //MainActivity路徑
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//
intent2.setComponent(componentName);
context.startActivity(intent2);
}
}
AndroidManifest.xml 加上 權(quán)限和Receiver策肝,
manifest 標(biāo)簽加android:sharedUserId="android.uid.system"
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:sharedUserId="android.uid.system"
package="*.*.*">
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<application
...
>
<receiver
android:name=".*.*.InstallReceiver"
android:enabled="true"
android:exported="true"
android:priority="1000">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
< /application>
</manifest>
當(dāng)更新完app后删豺,會(huì)收到廣播。重新拉起App