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

7
我开发了一个Android应用程序,允许用户更改一些系统设置。一旦用户配置了该应用程序,就没有必要再启动它了。这就是为什么许多用户要求我添加一个从启动器隐藏应用程序的选项。
我测试了this post中提供的解决方案。
我是这样隐藏应用程序的:
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);

我这样取消隐藏应用程序:
PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

只要我不给我的应用程序添加权限,它就能很好地运行。例如,我使用以下权限:
<uses-permission android:name="android.permission.SET_WALLPAPER" />

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

enter image description here

这是我的清单:

<?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>

所以我的问题是:当应用程序请求权限时,是否有一种方法可以隐藏应用程序不出现在启动器中?

我不确定,但你可能需要通过编程方式获取用户的许可。 - JDevoloper
谢谢您的回答。android.permission.SET_WALLPAPER权限不需要用户授权。在gif上也可以看到设置应用程序中的权限设置是灰色的。 - Charles Annic
1个回答

4
我不确定"officially not supported"是否算是一个答案。但是很不幸,根据docs的说法,在Android Q中,除非应用程序满足以下条件之一,否则应用程序的至少一个活动或合成活动将出现在返回的列表中: - 应用程序是系统应用程序。 - 应用程序没有请求任何权限。 - 应用程序清单中的标签不包含任何表示应用程序组件的子元素。
此外,系统会针对以下与企业相关的情况隐藏某些或所有应用程序的合成活动: - 如果设备是完全受管理的设备,则不会在返回的列表中显示任何应用程序的合成活动。 - 如果当前用户具有工作配置文件,则不会在返回的列表中显示用户工作应用程序的任何合成活动。

1
这不是我所期望的答案,但却是正确的。谢谢! - Charles Annic
你找到解决方案了吗? - Hamza Ezzaydia
1
@HamzaEzzaydia 我认为不会有解决方案,因为Android已经停止支持该功能。 - Farid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接