Android隐藏app桌面图标

在启动的activity的AndroidManifest注册中,添加隐式启动的data:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.tq.time">
<!--
  <data android:host="MainActivity" android:scheme="com.tq.time" />
  这条属性可以让启动app入口Activity申明为由接收隐士的Intent来启动,这样自然也就不会显示图标了
-->
    <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">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <data android:host="MainActivity" android:scheme="com.tq.time" />
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>
这个是我当时写的Demo,也是最终的处理方案,这样把启动activity的intent变为隐式的,桌面的图标就会被隐藏,那么就实现我希望实现的效果了。
下面是要说一下当时探索的时候遇到的问题。




删除 应用图 标的若干解决方案:

1、AndroidManifest.xml文件中在入口Activity的intent-filter里去掉
[html]  view plain  copy
 print ?
  1. <category android:name=”android.intent.category.LAUNCHER” />  
或者将LAUNCHER改为DEFAULT

或者在在程序中加入下面的代码

      init();
//        PackageManager p = getPackageManager();
//        p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

    }

PackageManager.COMPONENT_ENABLED_STATE_ENABLED //显示应用图标
PackageManager.COMPONENT_ENABLED_STATE_DISABLED //隐藏应用图标

网上找到的博客说这俩个值来显示和隐藏应用图标有问题,隐藏以后就无法在显示应用图标了,在设置里的所有应用里也找不到了;

但是实际调试中,我根本无法安装demo到手机上,可能是新的AS不允许这种操作吧!

但是会有如下几个问题:
1、如果去掉<category android:name=”android.intent.category.LAUNCHER” />,就表示app没有启动入口了,
这样子确实是解决了不显示图标的效果,但是那样的话我们的应用也运行不了了,失败的方案。
然后我看了 android developer上的说明:
public static final int COMPONENT_ENABLED_STATE_DISABLED
Flag for setApplicationEnabledSetting(String, int, int) and setComponentEnabledSetting(ComponentName, int, int): This component or application has been explicitly disabled, regardless of what it has specified in its manifest.
意思是,即使你在manifest中声明了这个component或application,当你设置为COMPONENT_ENABLED_STATE_DISABLED时,他们都是不可用的。也就是说,如果你在MainActivity中这样设置了,那么应用图标不会显示,应用也不会运行。


还有一种方案但是这个方案是不是在所有的android 手机都试用还有待确认,我是这么操作的,在AS里面修改代码包名路径,在每个相关地方修改但是不要修改清单文件里的,这样在MIUI系统里系统清单还是修改之前的包名,但是实际包名已经是修改之后的了,也达到了没有图标的要求,但是会导致之后安装什么app都不现实图标

最优的解决方案:

就是我开始用的那个方法!

接下来我要说的这种方法可以隐藏图标,同是也可以正常启动运行。
在manifest的入口activity里面intent-filter中设置<data></data>元素。

比如:

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <data android:host="MainActivity" android:scheme="com.tq.time" />
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

注意,android:scheme是大小写敏感的,必须以小写字母开头
也就是这个MainActivity可以响应Uri为com.android.example://AuthActivity的特定 Intent

但是为什么加入这个之后app就不显示图标了呢?


      因为我们把app的入口Activity申明为由接收隐士的Intent来启动,这样自然也就不会显示图标了。
如果需要显示图标的话而且也必须响应上述Uri的话,那么我们可以在该Activity中再加入一个intent-filter标签,将data元素移到新建的标签中。

这样应用既可以显示图标又可以响应特定的Uri了。

要在Android应用隐藏桌面图标,你可以通过以下步骤实现: 1. 在你的Android项目的AndroidManifest.xml文件中,找到你的启动Activity的声明。通常它是以`<activity>`标签表示的,并且在其中包含一个`<intent-filter>`标签。确保你的启动Activity有`MAIN`和`LAUNCHER`的intent-filter,类似这样: ```xml <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` 2. 在上述`<activity>`标签中添加一个新的属性:`android:enabled="false"`。这将禁用该Activity的启用状态。 ```xml <activity android:name=".MainActivity" android:label="@string/app_name" android:enabled="false"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` 3. 保存并重新构建你的应用程序,并将其安装到设备上。 现在,当你启动应用程序后,应用程序的图标将不再显示在设备的桌面上。然而,你仍然可以通过其他方式启动该应用程序,例如通过应用程序列表或通过其他应用程序的链接。 请注意,这种方法仅仅是隐藏应用程序的桌面图标,并没有真正地隐藏或保护应用程序的内容。如果用户知道你的应用程序的包名,并且知道如何启动它,他们仍然可以访问你的应用程序。如果你需要更高级的应用程序隐藏和保护功能,你可能需要使用其他技术或库来实现,例如使用设备管理器API或加密应用程序内容。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值