中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中MIUI通知類短信權限的坑有哪些

發布時間:2021-08-25 14:47:46 來源:億速云 閱讀:120 作者:小新 欄目:移動開發

這篇文章給大家分享的是有關Android中MIUI通知類短信權限的坑有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

MIUI的坑爹設計還真不少。比如說,MIUI手機不插SIM卡就不能USB調試安裝應用,好,插,結果又讓你先登錄小米賬號(無話可說)。MIUI權限申請也是坑!

就拿READ_SMS這個權限來說,按照安卓規范來動態申請,它不彈窗讓用戶允許,然后回調卻是成功的,到設置里一看,該權限還是詢問狀態。這什么邏輯啊!
然后想實現自動填短信驗證碼,不好意識,我MIUI自定義了一個通知類短信權限(Service_SMS),你不知道怎么申請,也不知道怎么在manifest注冊。所以你沒有權,也限監聽不到的。我也不知道這個權限完整的名字叫什么,看設置里只有兩種狀態(沒有詢問,估計也沒法動態申請)。

目前有一種方案就是你引導用戶去開啟,但是現在短信都是通知條的形式,還會有個復制按鈕,這樣做其實多此一舉,但如果是其他敏感權限或許有這么做的價值。如下:

1、首先判斷系統是不是MIUI,然后在需要的Activity調用goPermissionSettings(Activity activity);

2、在相應activity重寫onActivityResult,根據request_code,回調就直接執行需要用到權限的業務代碼。但是用戶到底給了權限沒,其實也沒法判斷,只能“盲調”(自己創的一個詞)需要權限的代碼,所以需要try/catch一下,崩了就說明沒有權限,沒問題就說明給了權限。

3、可以用sharePreference記錄下授權狀態,不用每次都引導下(但這樣還是可能出現用戶給過權限后又手動關掉的情況)。上面的try/catch很重要啊,catch里可以做些處理,再引導一次或者你還有其他想法。

public class MiuiUtils {

  private MiuiUtils() {
    throw new UnsupportedOperationException("u can't instantiate me...");
  }

  private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
  private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
  private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
  public static final int REQUEST_CODE_SERVICE_SMS = 100;


  /**
   * @return whether or not is MIUI
   * @link http://dev.xiaomi.com/doc/p=254/index.html
   */
  public static boolean isMIUI() {
    String device = Build.MANUFACTURER;
    LogUtils.v("Build.MANUFACTURER = " + device);
    if (device.equals("Xiaomi")) {
      Properties prop = new Properties();
      try {
        prop.load(new FileInputStream(new File(Environment
            .getRootDirectory(), "build.prop")));
      } catch (IOException e) {
        e.printStackTrace();
        return false;
      }
      return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
          || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
          || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
    } else {
      return false;
    }
  }


  public static void goPermissionSettings(Activity context) {
    Intent intent;
    try {//MIUI8/9
      intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
      intent.setClassName("com.miui.securitycenter",
          "com.miui.permcenter.permissions.PermissionsEditorActivity");
      intent.putExtra("extra_pkgname", context.getPackageName());
      context.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);
    } catch (ActivityNotFoundException e) {
      try {//MIUI5/6
        intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
        intent.setClassName("com.miui.securitycenter",
            "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
        intent.putExtra("extra_pkgname", context.getPackageName());
        context.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);
      } catch (ActivityNotFoundException e1) {
        //應用信息界面
        intent = new Intent(
            Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        Uri uri = Uri.fromParts("package", context.getPackageName(),
            null);
        intent.setData(uri);
        context.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);;
      }
    }
  }
}

給個有用的ADB命令.可以獲取當前Activity的信息,不然你以為,是怎么知道上面goPermissionSettings(Activity activity)方法里,跳轉到MIUI權限設置的Activity的包名和完整類名的:

adb shell dumpsys activity | findstr "mFocusedActivity"

感謝各位的閱讀!關于“Android中MIUI通知類短信權限的坑有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双流县| 康定县| 龙山县| 咸宁市| 莱西市| 淳化县| 米脂县| 光山县| 彝良县| 得荣县| 明星| 寿宁县| 新乐市| 嘉祥县| 遵化市| 衡南县| 巴塘县| 马尔康县| 沙湾县| 土默特左旗| 峡江县| 石门县| 全州县| 信丰县| 诸暨市| 含山县| 唐海县| 台江县| 聊城市| 北辰区| 南郑县| 上虞市| 平凉市| 芦溪县| 乌鲁木齐县| 剑川县| 泗洪县| 浦北县| 墨玉县| 淮安市| 郯城县|