【发布时间】:2017-07-07 07:10:57
【问题描述】:
我正在为儿童模式应用构建自定义启动器。我已经关注了这个 link 创建一个启动器选择器,让用户选择我的应用作为他们的默认启动器。
问题是如果他们的设备中有默认启动器,则上面链接中的代码不起作用。我正在 Zenphone5,Android 4.4.2 上进行测试。我看到有些人在 Android 4.4.2 上创建启动器选择器时遇到同样的问题。
我到处搜索如何创建这样的启动器选择器:Nester、iWawa。他们怎么能这样做?
AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ttb.com.kidmode">
<!-- Hide status bar -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<!-- Hide the recent apps -->
<uses-permission android:name="android.permission.REORDER_TASKS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light">
<activity android:name=".activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activity.KidModeActivity"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
创建启动器选择器对话框:
if (isMyLauncherDefault() == false) { // enable fake home to force system to clear default
Log.v(">>>", "false");
ComponentName launcherActivity = new ComponentName(this, KidModeActivity.class);
getPackageManager().setComponentEnabledSetting(launcherActivity,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
goHome();
} else {
// Go home
goHome();
}
按下主页按钮:
private void goHome() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
编辑
完整的故事是:“我打开我的应用程序,然后单击一个按钮转到我的启动器 -> 没有任何反应(因为默认设置了另一个启动器)。如果我打开该启动器设置(设置 -> 应用程序 -> ..) 并单击“清除默认值”,然后再次打开我的应用程序,单击按钮转到我的启动器-> 将显示对话框。从现在开始,代码运行良好”。我不想打开设置点击“清除默认值”
【问题讨论】:
-
发布您的代码和清单,您可能缺少一些东西
-
嗨@njzk2 刚刚添加了代码。请检查一下
-
那么当
goHome被调用时会发生什么? -
如果用户选择了我的启动器作为默认启动器,goHome 会将用户带到我的自定义启动器@njzk2。这意味着按下主页按钮
-
OK 完整的故事是:“我打开我的应用程序,然后单击一个按钮转到我的启动器 -> 没有任何反应(因为另一个启动器设置为默认设置)。如果我打开该启动器设置(设置 -> 应用程序 -> ..) 并单击“清除默认值”,然后再次打开我的应用程序,单击按钮转到我的启动器 -> 将显示对话框”。我不想打开设置以单击“清除默认值”。 @njzk2
标签: java android android-launcher