如何在android中制作Home_Screen启动器选择器?

时间:2016-09-09 19:47:59

标签: android android-studio android-launcher

我开发了一个Home_Screen启动器。现在,我想设置一个按钮,单击时,显示可用的Home_Screen启动器列表。我使用过这种方法:

Intent i = new Intent(Intent.ACTION_MAIN);
            i.addCategory(Intent.CATEGORY_HOME);
            i.addCategory(Intent.CATEGORY_DEFAULT);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(Intent.createChooser(i, "Choose Launcher, Please!"));

它做我想要的。但是当我从这个选择器中选择我的Home_Screen Launcher时,它只是将我的启动器作为活动而不是默认的Home_Screen启动器打开。

所以你发现,我想做一个选择器并将我的应用程序设置为默认的Home_Screen Launcher。我怎么能这样做?

注意:我也尝试过这种方法,但它没有在创建的选择器中显示我的应用程序:

public static void resetPreferredLauncherAndOpenChooser(Context context) {
PackageManager packageManager = context.getPackageManager();
ComponentName componentName = new ComponentName(context, MainLauncher.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);}

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' “”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“” “”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“” '' '' '' '' '' '' '' '' '' '''

编辑:这是我的清单。我有一个Activity作为Home_Launcher,一个Activity作为category.LAUNCHER。请帮帮我们。我在网上搜索过,但没有找到解决方案。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.ablazephoenix.myappluncher">

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="false"
    tools:replace="android:supportsRtl"
    android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen">
    <activity android:name=".FirstPage"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".Allowed_Apps_Chooser"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen"/>

    <activity android:name=".Wallpaper_Chooser"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen"/>

    <activity android:name=".MainLauncher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen"
        android:launchMode="singleTask"
        android:stateNotNeeded="true">
        <intent-filter>
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>

    <service android:name=".LauncherService"/>

    <activity android:name=".Settings"
        android:label="Settings"
        android:theme="@style/AppTheme"/>

</application>

1 个答案:

答案 0 :(得分:0)

Finnaly,我解决了问题!

首先,我道歉没有正确搜索网页!好。开始吧。 首先想象你已经创建了一个名为MainLauncher的Home_Launcher。看下面的方法:

Intent selector = new Intent(Intent.ACTION_MAIN);
    selector.addCategory(Intent.CATEGORY_HOME);
    selector.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(selector);

此方法无法始终有效。它将在您第一次将Home_launcher设置为默认值时工作。如果您第二次尝试此方法,设备将无法将您的应用程序识别为使用Home_Launcher的新应用程序,并且此提到的方法将显示设备的默认Home启动程序。所以你应该在Main Home_Launcher旁边制作一个假的Home_launcher,如下所示:

public class FakeLauncherActivity extends Activity {
/** THIS IS THE FAKE LAUNCHER AND SHOULDN'T CONTAIN ANYTHING! */}

并在Manifest中定义如下:

<activity
        android:name=".FakeLauncherActivity"
        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>

...你可以选择如下:

public static void resetPreferredLauncherAndOpenChooser(Context context) {
    PackageManager packageManager = context.getPackageManager();
    ComponentName componentName = new ComponentName(context, FakeLauncherActivity.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);
}

使用此方法,只要您尝试制作选择器,用户设备就会认为设备中有新的Home_Launcher,并且会在选择器中显示设备的所有可用Home_Launchers,包含您的MainLauncher,除了您的FakeLauncherActivity。

我希望我的回答可能有用。但是有关更多信息,您可以查看这篇非常好的帖子:enter link description here