Android 10如何隱藏應用圖標

隱藏應用圖標這個功能應該用的很少!畢竟用到這個功能的應用可想而之(手動滑稽)

隱藏圖標的實現方式我想在網上查到很多了有在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系統做的一個方案!有用的話可以看看 沒用的話就當看個熱鬧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章