Android自定义启动器

时间:2016-09-10 15:13:03

标签: android android-launcher

我正在构建一个儿童模式应用。在我的应用程序中,一个名为KidModeActivity的活动(这是一个阻止孩子退出活动的启动器)

的AndroidManifest.xml

<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"
        android:clearTaskOnLaunch="true"
        android:launchMode="singleTask"
        android:stateNotNeeded="true">
        <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>

KidModeActivity有android:enabled =“false”。要进入小孩模式,我将启用该活动,然后为用户创建一个启动器选择器

ComponentName launcherActivity = new ComponentName(this, KidModeActivity.class);
                    getPackageManager().setComponentEnabledSetting(launcherActivity,
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
                // Create launcher chooser
                Intent selector = new Intent(Intent.ACTION_MAIN);
                selector.addCategory(Intent.CATEGORY_HOME);
                startActivity(selector);

我可以选择自定义启动器 在自定义启动器中时:

  • 按下

  • 时,主页按钮正常
  • 后退按钮确定

  • 但是我仍然可以按最近的按钮并在那里看到我的应用程序(!!!),我也可以滑动以关闭我的应用程序

有人帮忙吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

在之前的Android版本中,您可以运行Intent.ACTION_CLOSE_SYSTEM_DIALOGS来检查最近的应用程序抽屉列表,然后运行此意图来关闭任何此类系统对话框。但它也会关闭电源按钮对话框和其他系统对话框。也不适用于Android Lollipop及以上版本。

因此,您需要运行后台服务和任务,该任务始终会检查正在运行的热门活动是您的应用还是主屏幕中允许的任何应用。如果没有,那么运行你的家庭活动,即:KidModeActivity。

要获得Lollipop设备中的热门活动,您需要允许您的应用获取使用状态并获得热门活动

UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");
long time = System.currentTimeMillis();
// We get usage stats for the last 40 seconds
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 40, time);

如果您的应用需要预先支持棒棒糖设备,请使用getTasks获取热门活动。