首先,我已经研究了很多关于我的问题,但找不到合适的解决方案,因此我在此处发布我的查询。希望能够得到更好的解决方案:在卸载应用程序之前询问密码
我有一个需求,在用户从设置或其他任何应用程序(如MyAppSharer)中删除我的应用程序之前,需要向用户请求密码。我找到了一个解决方案,当用户单击卸载按钮时,我可以成功地调用我的活动。我在这里应用了技巧,然后打电话给服务。在服务中,我运行每1秒运行一次的计时器,并在那一秒钟内检查运行任务的最顶级活动。这按预期完美运行。
现在,我的问题是,这个活动apppears每个应用程序用户试图卸载。我需要的是我调用的活动,应该只在用户尝试卸载我的应用程序时出现在我的应用程序中。
这里是我的代码:
public static final String PACKAGE_INSTALLER = "com.android.packageinstaller";
public static final String PACKAGE_INSTALLER_UNINSTALL_ACTIVITY = "com.android.packageinstaller.UninstallerActivity";
alarmTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);;
ComponentName topActivity = mActivityManager.getRunningTasks(1).get(0).topActivity;
final String packageName = topActivity.getPackageName();
String className = topActivity.getClassName();
Log.v(TAG, "packageName:" + packageName);
Log.v(TAG, "className:" + className);
if (PACKAGE_INSTALLER.equals(packageName)
&& PACKAGE_INSTALLER_UNINSTALL_ACTIVITY.equals(className)) {
//Here I need to apply one condition where package name received to be matched with my package name. But I am not sure how to fetch package name of selected application for uninstalling
//To Cancel Existing UninstallerActivity and redirect user to home.
Intent homeIntent = new Intent();
homeIntent.setAction(Intent.ACTION_MAIN);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
homeIntent.addCategory(Intent.CATEGORY_HOME);
startActivity(homeIntent);
//To open my activity
Intent loginActivity = new Intent(UninstallService.this, Act_Login.class);
loginActivity.putExtra(Constants.KEY_IS_FROM_SERVICE, true);
loginActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(loginActivity);
}
}
}, 0, 1000);
我不确定你背后的意图,但从用户的角度来看,我不会喜欢一个应用程序,当我卸载它的时候会问这个应用程序。事实上,我卸载应用程序意味着要么我不满意,要么我有更好的选择,或者可能是别的。不管是什么原因,在这个时候要求一些东西可能会让我更加烦恼。所以要小心。我希望你的意图是好的。 –
@AtolOHolic我认为他们正在试图制造病毒? :) – Deeps
是否记录了软件包名称,并确定您获取软件包名称的方式是否正确? –