为什么我的 Android Box 没有更改默认启动器?

Why is my Android Box not changing the default launcher?

我有一个 Android 应用程序,我想用它来替换 android 盒子上的默认启动器。 我的 AndroidManifest.xml 文件包含这些行:

<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:hardwareAccelerated="true"
android:windowSoftInputMode="stateAlwaysHidden"
android:screenOrientation="landscape"
android:usesCleartextTraffic="true">

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:launchMode="singleInstance">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
    <category android:name="android.intent.category.HOME" />
    <category android:name="android.intent.category.DEFAULT"/>
  </intent-filter>

</activity>

许多教程表明必须添加最后两个类别才能将我的应用分类为自定义启动器。

此外,在我的 MainActivity.cs 中有这些行:

[Activity(Label = "@string/app_name", Name = "com.MediaKind.Mediaroom.MainActivity", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity, TV2Client.IHost, ISurfaceHolderCallback2

我使用 VS 2019 创建了签名 APK,并使用以下行将其推送到设备:

adb push <path to apk> system/priv-app/Mediaroom/

我把它推到那里,所以它可以是一个系统应用程序。

之后,我转到 adb shell 并禁用了默认的 Leanback 启动器,如下所示:

adb shell pm hide com.google.android.leanbacklauncher

在那之后,我重新启动了设备,希望设备能用我的应用程序启动,但它没有。 logcat.

上没有任何错误

此外,我在 Android 电视上工作,而不是在智能手机上工作,我担心的是我发现多个来源表明自 Marshmallow 发布后就不可能再使用了。

如果您还需要什么,请告诉我。

感谢您阅读本文。

经过大量研究,我发现默认 google Leanback 启动器的优先级高于我的自定义启动器。

Google 启动器的优先级为 2,这意味着不会考虑低于 2 的所有内容。

要解决这个问题,您需要像这样编辑 intent-filter:

<intent-filter android:priority="3">
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
    <category android:name="android.intent.category.HOME" />
    <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

只需将 android:priority="3" 添加到 intent-filter,如果您希望启动器自动添加为默认值,只需将优先级设置为 3,即可完成,但是当您需要时每次在启动时选择启动器,将优先级设置为 2,因为 2 是 google leanback 启动器的默认优先级。

希望这对下一个有需要的人有所帮助。