Android 主屏幕启动器应用程序开发 - 以前的启动器显示在我的透明启动器活动后面

问题描述 投票:0回答:1

我正在开发一个 Android 启动器主屏幕应用程序,每当我将我正在开发的应用程序设置为默认启动器时,它会在主屏幕上显示我的启动器,而不是之前设置的默认启动器。

我想使用系统背景,所以我的主屏幕应用程序的主要活动有一个透明的背景,但我不希望它坐在以前的启动器的用户界面 (OneUI) 之上。

我的应用程序清单中是否应该有一个活动标签,或者确保先前设置的启动器不再运行的东西?感谢您的帮助!

example outcome

我研究了如何在 Android 上关闭其他任务,但我的应用程序没有权限。我不确定如何在其权限范围内从我的透明默认启动器下的 UI 中删除其他应用程序。

这是清单中的当前活动:

<activity
   android:launchMode="singleTask"
   android:name=".MainActivity"
   android:exported="true">
   <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.HOME" />
   </intent-filter>
</activity>
java android transparent launcher homescreen
1个回答
0
投票

要将您的应用程序设置为默认启动器并确保它替换主屏幕上先前设置的启动器,您可以使用用于启动主要活动的

CLEAR_TOP
中的
Intent
标志。此标志清除目标应用程序的活动堆栈,删除任何以前打开的活动。

这是一个示例,说明如何修改您的

MainActivity
以实现此目的:

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   // Check if the application is already the default launcher
   if (!isMyLauncherDefault()) {
       // Create an intent with the CLEAR_TOP flag
       Intent intent = new Intent(Intent.ACTION_MAIN);
       intent.addCategory(Intent.CATEGORY_HOME);
       intent.addCategory(Intent.CATEGORY_DEFAULT);
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

       // Start the intent
       startActivity(intent);
       finish();
   }
   // Rest of your onCreate code...
}

isMyLauncherDefault()
方法用于检查您的应用程序是否已设置为默认启动器。您可以按如下方式实现它:

private boolean isMyLauncherDefault() {
   String packageName = getPackageName();
   String defaultLauncher = null;

   Intent intent = new Intent(Intent.ACTION_MAIN);
   intent.addCategory(Intent.CATEGORY_HOME);

   ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
   if (resolveInfo != null && resolveInfo.activityInfo != null) {
       defaultLauncher = resolveInfo.activityInfo.packageName;
   }

   return defaultLauncher != null && defaultLauncher.equals(packageName);
}

此代码将检查您的应用程序是否已经是默认启动器。如果不是,它将创建一个带有

Intent
标志的
CLEAR_TOP
并开始将您的发射器带到前面的意图,有效地取代以前的发射器。
finish()
方法被调用以确保从堆栈中删除先前启动器的活动。

记得用你的启动器的主要活动类的正确名称替换

MainActivity

通过使用这种方法,您的启动器将被设置为默认启动器,并将替换主屏幕上以前的启动器。

© www.soinside.com 2019 - 2024. All rights reserved.