我想实现类似 AppLock 应用程序正在做的事情。
如果在其设置中设置为锁定应用程序卸载/安装,那么在卸载任何应用程序时(精确地单击“卸载”按钮)会出现一个要求输入密码/模式的锁定屏幕。
只有在输入密码后,用户才被允许卸载应用程序。
单击“卸载”按钮时会得到什么意图(或任何东西,我认为这是一个意图但不确定)?
另外我不想让它成为设备管理员,因为我提到的应用程序确实需要成为设备管理员。
如果他们能做到,那就有办法了。请帮忙。
我想实现类似 AppLock 应用程序正在做的事情。
如果在其设置中设置为锁定应用程序卸载/安装,那么在卸载任何应用程序时(精确地单击“卸载”按钮)会出现一个要求输入密码/模式的锁定屏幕。
只有在输入密码后,用户才被允许卸载应用程序。
单击“卸载”按钮时会得到什么意图(或任何东西,我认为这是一个意图但不确定)?
另外我不想让它成为设备管理员,因为我提到的应用程序确实需要成为设备管理员。
如果他们能做到,那就有办法了。请帮忙。
我找到了一种方法。
当您转到设置->管理应用程序->单击任何应用程序时。
你会收到一个带有附加包名称的广播。
当您单击该屏幕上的卸载按钮时,将始终打开一个活动 name com.android.uninstaller.UnistallerActivity
。
所以这个问题的解决方案是上面提到的1和2步骤的组合方式。
当您获得第一步中提到的意图并且附加内容包含您的应用程序的包名称时,启动一个活动观察器PackageManager
,您可以使用它获得最可见的活动及其包。
因此,现在如果启动了卸载程序活动,那么您可以确定用户想要卸载您的应用程序。
在那之后,您可以采取必要的行动来阻止他这样做。
try catching below intent in the broadcast reciver and fire up ur activity warning activity or processing what u want to carry on.
"android.intent.action.UNINSTALL_PACKAGE"
this intent will not given or broadcasted to same app which is about to get uninstalled
试试这个代码
请尝试通过 ActivityManager 获取任务中的 top Activity,并检查是否为卸载 Activity。
ComponentName topActivity = mActivityManager.getRunningTasks(1).get(0).topActivity;
String packageName = topActivity.getPackageName();
String className = topActivity.getClassName();
Log.v(TAG, "packageName" + packageName);
Log.v(TAG, "className" + className);
if ("com.android.packageinstaller".equals(packageName)
&& "com.android.packageinstaller.UninstallerActivity".equals(className)) {
//Do anything you want here
}
孤单
看起来这已经经历了很多变化。的默认广播PACKAGE_REMOVED
无法按预期工作。我遇到了这个讨论,并没有真正实施它,但人们说它对他们有用。试试这个
https://groups.google.com/forum/?fromgroups=#!topic/android-developers/aX5-fMbdPR8
改为使其成为设备管理员。这将自动阻止用户卸载它。如果用户尝试从“安全”>“设备管理员”列表中将其停用以将其卸载,则您的应用可以要求输入密码。
您可以拦截应用程序卸载的意图。只需将以下代码放入清单文件中:
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".UninstallActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DELETE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="package" android:pathPattern="com.package.yourapp" />
</intent-filter>
</activity>
</application>
在此之后,您可以以某种方式处理您的应用程序将被删除,并调用包管理器卸载程序。