网站模板吧,如何做exo网站,代做网页设计作业价格,苏州保洁公司收费价格表摘要#xff1a;通过广播设置全局参数控制应用是否允许卸载#xff0c;全局参数在Launcher和PackageInstaller两个模块中使用到。此功能可用于MDM后台控制是否允许设备卸载应用。
1. 静态注册广播
由于系统安装和卸载的功能集中在PackageInstaller模块中#xff0c;为了更…摘要通过广播设置全局参数控制应用是否允许卸载全局参数在Launcher和PackageInstaller两个模块中使用到。此功能可用于MDM后台控制是否允许设备卸载应用。
1. 静态注册广播
由于系统安装和卸载的功能集中在PackageInstaller模块中为了更好的调用并适配android标准接口故将广播注册在PackageInstaller模块同时添加写全局变量的权限。
Index: frameworks/base/packages/PackageInstaller/AndroidManifest.xml--- frameworks/base/packages/PackageInstaller/AndroidManifest.xml (版本 360)frameworks/base/packages/PackageInstaller/AndroidManifest.xml (版本 361)-18,6 18,7 uses-permission android:nameandroid.permission.PACKAGE_USAGE_STATS /uses-permission android:nameandroid.permission.QUERY_ALL_PACKAGES /uses-permission android:nameandroid.permission.POST_NOTIFICATIONS /uses-permission android:nameandroid.permission.WRITE_SETTINGS / !-- --uses-permission android:namecom.google.android.permission.INSTALL_WEARABLE_PACKAGES / -142,6 143,16 android:authoritiescom.google.android.packageinstaller.wear.providerandroid:grantUriPermissionstrueandroid:exportedtrue /!-- { --receiver android:name.UninstallAppStatusAddReceiverandroid:exportedtrue intent-filteraction android:namecom.example.launcher.UNINSTALL//intent-filter/receiver!-- } --/application/manifest2. 收到广播后设置全局变量
接收到携带应用包名和卸载与否标志位的参数的广播后将全局变量对应的包名设置为相对应的标志位。
Index: frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/UninstallAppStatusAddReceiver.java--- frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/UninstallAppStatusAddReceiver.java (不存在的)frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/UninstallAppStatusAddReceiver.java (版本 361)-0,0 1,57
package com.android.packageinstaller;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;public class UninstallAppStatusAddReceiver extends BroadcastReceiver {private final static String ACTION_UNINSTALL com.example.launcher.UNINSTALL;Overridepublic void onReceive(Context context, Intent intent) {String action intent.getAction();Log.d(UninstallAppStatusAddReceiver, onReceive: action);if (ACTION_UNINSTALL.equals(action)) {String pkgName intent.getStringExtra(packageName);int flag intent.getIntExtra(flag,0);if (!(TextUtils.isEmpty(pkgName))) {Settings.System.putInt(context.getContentResolver(),pkgName, flag);}}}
}3. 卸载时不做处理
在设置-应用中卸载
Index: frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java--- frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java (版本 360)frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java (版本 361)-55,6 55,7 import android.os.ServiceManager;import android.os.UserHandle;import android.os.UserManager;
import android.provider.Settings;import android.util.Log;import com.android.packageinstaller.handheld.ErrorDialogFragment;-210,7 211,15 }}- showConfirmationDialog();// {int flag Settings.System.getInt(getContentResolver(), mPackageName, 0);if (flag 0) {showConfirmationDialog();}if (flag 1) {finish();}// }}public DialogInfo getDialogInfo() {
在Launcher拖动不显示卸载
Index: vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/ButtonDropTarget.java--- vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/ButtonDropTarget.java (版本 360)vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/ButtonDropTarget.java (版本 361)-185,6 185,13 setupItemInfo(dragObject.dragInfo);mActive supportsDrop(dragObject.dragInfo);}// {int flag android.provider.Settings.System.getInt(getContext().getContentResolver(),dragObject.dragInfo.getTargetPackage(), 0);if (flag 1) {mActive false;}// }setVisibility(mActive ? View.VISIBLE : View.GONE);mAccessibleDrag options.isAccessibleDrag;