MIUI應(yīng)用權(quán)限設(shè)置

無論你覺得我寫的好壞都可以在下面評論告訴我,你的支持是我繼續(xù)寫下去的動力,謝謝!

隨著miui越來越封閉,小米對非自由渠道的應(yīng)用限制越來越苛刻,我們公司的產(chǎn)品一半以上的用戶都是來自小米,而且像我們這樣的靠短信支付維持收入的游戲,短信權(quán)限默認(rèn)禁止真是要了我們的命。被加入miui黑名單的游戲默認(rèn)重要的權(quán)限都是禁止?fàn)顟B(tài),譬如發(fā)送短信權(quán)限默認(rèn)設(shè)置為禁止就直接斷了我們收入來源。因此花了幾個小時在網(wǎng)上搜索相關(guān)資料,我們不能幫助用戶打開應(yīng)用的權(quán)限至少我們能夠引導(dǎo)用戶去打開應(yīng)用權(quán)限,并且將引導(dǎo)盡可能做的很簡單。

其他廢話也不多說了,直接上代碼
先是通過context跳轉(zhuǎn)到對應(yīng)應(yīng)用的權(quán)限設(shè)置頁面:

/**
 * 跳轉(zhuǎn)到應(yīng)用權(quán)限設(shè)置頁面 http://www.tuicool.com/articles/jUby6rA 
 * @param context 傳入app 或者 activity context,通過context獲取應(yīng)用packegename,之后通過packegename跳轉(zhuǎn)制定應(yīng)用
 * @return 是否是miui
 */
public static boolean gotoPermissionSettings(Context context) {
    boolean mark = isMIUI();
    
    if ( mark ) {
        
        // 之兼容miui v5/v6  的應(yīng)用權(quán)限設(shè)置頁面,否則的話跳轉(zhuǎn)應(yīng)用設(shè)置頁面(權(quán)限設(shè)置上一級頁面)
        try {
            Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
            localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");
            localIntent.putExtra("extra_pkgname", context.getPackageName());
            context.startActivity(localIntent);
        } catch (ActivityNotFoundException e) {
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            Uri uri = Uri.fromParts("package", context.getPackageName(),null);
            intent.setData(uri);
            context.startActivity(intent);
        }
    }       
    
    return mark;
}

再就是判斷是否是小米的設(shè)備,官方為我們提供了一種簡單方便的辦法:

/**
 * 檢查手機(jī)是否是miui
 * @ref http://dev.xiaomi.com/doc/p=254/index.html
 * @return
 */
public static boolean isMIUI(){
    String device = Build.MANUFACTURER;
    System.out.println( "Build.MANUFACTURER = " + device );
    if ( device.equals( "Xiaomi" ) ) {
        System.out.println( "this is a xiaomi device" );
        return true;
    }
    else{
        return false;
    }       
}

我們同樣也可以使用類似查找activtiy的方式判斷是否是miui,但是這種方式同樣存在兼容的問題,不是很推薦,也附上代碼供大家參考:

/**
 * 判斷是否是miui V5/V6,老的miui無法兼容
 * @param context
 * @return
 */
public static boolean isMIUIv5v6(Context context) {
    boolean result = false;
    Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
    localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");
    if (isIntentAvailable(context, localIntent)) {
        result = true;
    }
    return result;
}

/**
 * 檢查是否有這個activity
 * @param context
 * @param intent
 * @return
 */
private static boolean isIntentAvailable(Context context, Intent intent) {
    PackageManager packageManager = context.getPackageManager();
    List<ResolveInfo> list = packageManager.queryIntentActivities(
            intent, PackageManager.GET_ACTIVITIES);
    return list.size() > 0;
}

以下是完整的代碼,可以直接使用的類:

public class SetMiuiPermission {

    /**
     * 跳轉(zhuǎn)到應(yīng)用權(quán)限設(shè)置頁面 http://www.tuicool.com/articles/jUby6rA 
     * @param context 傳入app 或者 activity context,通過context獲取應(yīng)用packegename,之后通過packegename跳轉(zhuǎn)制定應(yīng)用
     * @return 是否是miui
     */
    public static boolean gotoPermissionSettings(Context context) {
        boolean mark = isMIUI();
        
        if ( mark ) {
            
            // 之兼容miui v5/v6  的應(yīng)用權(quán)限設(shè)置頁面,否則的話跳轉(zhuǎn)應(yīng)用設(shè)置頁面(權(quán)限設(shè)置上一級頁面)
            try {
                Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
                localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");
                localIntent.putExtra("extra_pkgname", context.getPackageName());
                context.startActivity(localIntent);
            } catch (ActivityNotFoundException e) {
                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", context.getPackageName(),null);
                intent.setData(uri);
                context.startActivity(intent);
            }
        }       
        
        return mark;
    }
    
    /**
     * 檢查手機(jī)是否是miui
     * @ref http://dev.xiaomi.com/doc/p=254/index.html
     * @return
     */
    public static boolean isMIUI(){
        String device = Build.MANUFACTURER;
        System.out.println( "Build.MANUFACTURER = " + device );
        if ( device.equals( "Xiaomi" ) ) {
            System.out.println( "this is a xiaomi device" );
            return true;
        }
        else{
            return false;
        }       
    }

    /**
     * 判斷是否是miui V5/V6,老的miui無法兼容
     * @param context
     * @return
     */
    public static boolean isMIUIv5v6(Context context) {
        boolean result = false;
        Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
        localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");
        if (isIntentAvailable(context, localIntent)) {
            result = true;
        }
        return result;
    }

    /**
     * 檢查是否有這個activity
     * @param context
     * @param intent
     * @return
     */
    private static boolean isIntentAvailable(Context context, Intent intent) {
        PackageManager packageManager = context.getPackageManager();
        List<ResolveInfo> list = packageManager.queryIntentActivities(
                intent, PackageManager.GET_ACTIVITIES);
        return list.size() > 0;
    }
}

以上函數(shù)的入口為:gotoPermissionSettings,傳入當(dāng)前application的context即可條狀到當(dāng)前應(yīng)用的權(quán)限設(shè)置頁面。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容