隐藏应用图标这个功能应该用的很少!毕竟用到这个功能的应用可想而之(手动滑稽)
隐藏图标的实现方式我想在网上查到很多了有在AndroidManifest实现的也用通过如下代码实现的
/**
* 启动组件
* @param componentName 组件名
*/
private void enableComponent(ComponentName componentName) {
//此方法用以启用和禁用组件,会覆盖Androidmanifest文件下定义的属性
PackageManager mPackageManager=getPackageManager();
mPackageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
/**
* 禁用组件
* @param componentName 组件名
*/
private void disableComponent(ComponentName componentName) {
PackageManager mPackageManager=getPackageManager();
mPackageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
但是这些实现方式在Android 10系统上面好像不是那么有用!
为什么android10系统隐藏图标无效
Android 10
限制了在启动器中隐藏应用图标的功能。除非满足以下任一条件,否则应用必须具有图标:
它是系统应用,即使是更新后的应用。
它是托管式配置文件管理应用(工作资料所有者)。
它未请求任何权限。
它不包含任何组件(例如,Activity、内容提供程序、广播接收器和服务)。
具有图标且拥有已启用的可启动 Activity 的应用不受影响。除了上面列出的例外情况,所有应用均会显示一个图标。如果应用没有图标,则会显示默认的系统图标。点按没有可启动 Activity 的应用图标时会打开应用信息屏幕。
看到这里是不是明白了为什么Android 10无法隐藏图标了,但是产品经理不听这些!就是要实现这个功能!那到底这个功能怎么适配Android 10呢!干货来了
利用activity-alias 这个是做啥的这里就不叙述了!实现的原理也很简单!就是针对Android 10系统给应用生成两个应用图标!主应用图标和副应用图标!副应用图标默认为透明图标,并且默认不显示!在调用隐藏图标的时候隐藏主应用图标,显示副图标!因为副图标是透明的所以在桌面是看不到的!(虽然看不到 但是还是实际存在的)
上代码
<activity android:name=".MainActivity"
android:launchMode="singleInstance"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Acitivity1"
android:excludeFromRecents="true"
android:exported="false"
android:finishOnTaskLaunch="false"
android:launchMode="singleInstance"
android:theme="@style/KeepLiveTheme"/>
<activity-alias
android:name=".MainAliasActivity"
android:targetActivity=".Acitivity1"
android:label=""
android:icon="@drawable/icon"//这里用透明图标
android:enabled="false">//这个要为false 不然默认会显示两个图标
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
icon文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00000000"/>
</shape>
Activity1是一个透明并且只有1像素的activity
public class Acitivity1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window window = getWindow();
// 设置窗口位置在左上角
window.setGravity(Gravity.LEFT | Gravity.TOP);
WindowManager.LayoutParams params = window.getAttributes();
params.x = 0;
params.y = 0;
params.width = 1;
params.height = 1;
window.setAttributes(params);
finish();
}
}
这样点击副图标也不会显示跳转到应用详细信息了 !直接给用户感觉无响应!
这个怎么在此打开app 可以通过外部跳转以及拨号键盘跳转(键盘输入*##123456##*),这里需要注意两点,一个就是小米的允许后台探出界面的权限,二个是跳转的activity不能是程序入口activity 也就是
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
以上就是针对Android 10系统做的一个方案!有用的话可以看看 没用的话就当看个热闹