当应用程序使用权限时,如何从启动器隐藏/取消隐藏应用程序?

Cha*_*nic 5 android

我开发了一个Android应用程序,允许用户更改某些系统设置。一旦用户配置了应用程序,就没有理由再启动它了。这就是为什么许多用户要求我添加一个选项以在启动器中隐藏该应用程序的原因。

我测试了这篇文章的解决方案。

我这样隐藏应用程序:

PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class); // activity which is first time open in manifiest file which is declare as <category android:name="android.intent.category.LAUNCHER" />
p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)

我以这种方式取消隐藏应用程序:

PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)

只要我不向我的应用程序添加权限,它就可以很好地工作。

例如,我使用以下权限:

<uses-permission android:name="android.permission.SET_WALLPAPER" />
Run Code Online (Sandbox Code Playgroud)

当我将此权限添加到清单中时,应用程序不会从启动器中消失。而且,当我单击它时,它会在我的应用程序页面上启动“设置”应用程序,如以下gif所示:

在此处输入图片说明

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cannic.apps.hideapptest">

    <uses-permission android:name="android.permission.SET_WALLPAPER" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>
Run Code Online (Sandbox Code Playgroud)

所以我的问题如下:当应用程序请求权限时,有没有办法从启动器中隐藏应用程序?

Far*_*rid 5

我不确定“官方不支持”是否是一个答案。但不幸的是,根据文档

从 Android Q 开始,除非应用至少满足以下条件之一,否则返回列表中至少会出现应用的 Activity 或合成 Activity 之一:

  • 该应用程序是一个系统应用程序。
  • 该应用程序不请求任何权限。
  • 应用清单中的标签不包含任何代表应用组件的子元素。

此外,在以下与企业相关的情况下,系统会隐藏部分或所有应用程序的合成活动:

  • 如果设备是完全托管的设备,则返回的列表中不会显示任何应用程序的合成活动。
  • 如果当前用户有工作资料,则返回的列表中不会显示用户工作应用的合成活动。