隱藏應用圖標這個功能應該用的很少!畢竟用到這個功能的應用可想而之(手動滑稽)
隱藏圖標的實現方式我想在網上查到很多了有在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();
}
}
這樣點擊副圖標也不會顯示跳轉到應用詳細信息了 !直接給用戶感覺無響應!
以上就是針對Android 10系統做的一個方案!有用的話可以看看 沒用的話就當看個熱鬧