安卓app如何在安裝時創建快捷方式

1:首先聲明權限:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
2:在啓動頁裏面的onCreate方法(或其他合適的方法)中執行如下方法:

public void initShortCut() {
    // intent發送隱式意圖,去創建快捷方式
    Intent addIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
    //不讓重建
    addIntent.putExtra("duplicate", false);
    // 將應用的圖標設置爲Parceable類型
    Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.mipmap.icon_release);
    // 點擊圖標之後的意圖操作
    Intent myIntent = new Intent(Intent.ACTION_MAIN);
    myIntent.setClassName(this, getClass().getName());
    // 設置快捷方式的名稱
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "百度影音");
    // 設置快捷方式的圖標
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
    // 設置快捷方式的意圖
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, myIntent);
    // 發送廣播
    sendBroadcast(addIntent);
}
3:但是上面的走完之後還有瑕疵就是每次點擊快捷鍵進入都會發送創建快捷鍵的意圖,雖然設置了不要重複創建,但是每次都彈出來已經創建過了的信息也是蠻讓人不爽的,所以需要在發送意圖前判斷是否已經創建過圖標了:

3.1:聲明權限:

<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
3.2方法:
//判斷是否創建過了快捷方式
public static boolean isAddShortCut(Context context) {
    boolean isInstallShortcut = false;
    ContentResolver cr = context.getContentResolver();
    String AUTHORITY = getAuthorityFromPermission(context, "com.android.launcher.permission.READ_SETTINGS");
    final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true");

    Cursor c = cr.query(CONTENT_URI, new String[]{"title"}, "title=?", new String[]{context.getString(R.string.app_name)}, null);

    if (c != null && c.getCount() > 0) {
        isInstallShortcut = true;
    }

    if (c != null) {
        c.close();
    }
    return isInstallShortcut;
}

public static String getAuthorityFromPermission(Context context, String permission) {
    if (TextUtils.isEmpty(permission)) {
        return null;
    }
    List<PackageInfo> packInfos = context.getPackageManager().getInstalledPackages(GET_PROVIDERS);
    if (packInfos == null) {
        return null;
    }
    for (PackageInfo info : packInfos) {
        ProviderInfo[] providers = info.providers;
        if (providers != null) {
            for (ProviderInfo provider : providers) {
                if (permission.equals(provider.readPermission) || permission.equals(provider.writePermission)) {
                    return provider.authority;
                }
            }
        }
    }
    return null;
}

發佈了30 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章