【发布时间】:2016-08-30 07:15:52
【问题描述】:
我正在做一个应用程序,它是我设备的默认启动器,经过大量搜索后,我发现无法以编程方式将我的应用程序定义为默认启动器。 因此,我决定执行以下操作,我将为管理员用户启用将此应用程序设置为默认值,并且此管理员将成为第一次安装应用程序并对其进行配置的人,然后再将设备提供给另一个用户。 退出应用程序的唯一方法是按下返回按钮,当用户按下它时,会出现一个对话框,要求输入密码,如果输入的密码是正确的,则应用程序将被删除为默认启动器
我使用此行代码来执行此操作:
getPackageManager().clearPackagePreferredActivities(getPackageName());
这工作正常,我可以正常返回设备的主屏幕,我想要的是,当用户退出应用程序并返回它时,我想验证该应用程序是否是默认启动器,如果它不是,显示“选择启动器”对话框以选择它作为默认值。
我已经尝试了所有这些选项:
Android home-screen/launcher chooser does not show 'use by default for this action' option
android: choose default launcher programatically
How to set default app launcher programmatically?
但这一切都奏效了,它无法识别出我的应用程序不再是默认启动器。 但是当我按下主页按钮时,会出现选择启动器的对话框。 我希望在再次启动我的应用程序时出现此对话框,而无需按主页按钮。
这是我用来查找是否是我的默认启动器的方法:
private boolean isMyLauncherDefault() {
final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
List<IntentFilter> filters = new ArrayList<>();
filters.add(filter);
final String myPackageName = getPackageName();
List<ComponentName> activities = new ArrayList<>();
PackageManager packageManager = getPackageManager();
// You can use name of your package here as third argument
packageManager.getPreferredActivities(filters, activities, null);
if(activities.size() == 0) //no default
return true;
for (ComponentName activity : activities) {
if (myPackageName.equals(activity.getPackageName())) {
return true;
}
}
return false;
}
当我在调试时查看活动数组时,我的应用程序仍然存在,但我怎么说,android 知道我的应用程序不是默认应用程序。我也需要这种方法认识到这一点。
下面的方法假设再次调用对话框:
public static void resetPreferredLauncherAndOpenChooser(Context context) {
PackageManager packageManager = context.getPackageManager();
packageManager.clearPackagePreferredActivities(context.getPackageName());
ComponentName componentName = new ComponentName(context, VideoActivity.class);
packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Intent selector = new Intent(Intent.ACTION_MAIN);
selector.addCategory(Intent.CATEGORY_HOME);
selector.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(selector);
packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
}
所有这些方法都来自以前的链接。
如果有人可以帮助我,我将非常感激。
PS:我使用的是 sdk 目标版本 21
【问题讨论】: