我已经开发了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启动器时,它只是将我的启动器作为活动打开,而不是默认的Home_Screen启动器。
因此,正如您所发现的,我想进行选择,并将我的应用设置为默认的Home_Screen启动器。我怎样才能做到这一点?
注意:我也尝试过这种方法,但是它不会在创建的选择器中显示我的应用程序:
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);}
'''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''
编辑:这是我的清单。我有一个活动作为Home_Launcher,有一个活动作为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>
最佳答案
最终,我解决了问题!
首先,很抱歉无法正确搜索网络!好。开始吧。
首先假设您创建了一个名为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启动器。因此,您应该在主Home_Launcher旁边制作一个假Home_launcher,如下所示:
public class FakeLauncherActivity extends Activity {
/** THIS IS THE FAKE LAUNCHER AND SHOULDN'T CONTAIN ANYTHING! */}
并在清单中定义如下:
<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
关于android - 如何在Android中制作Home_Screen启动器选择器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39418785/