国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android判斷定位功能是否可用的方法

2019-12-12 00:38:35
字體:
供稿:網(wǎng)友

定位功能是否可用由定位服務(wù)和定位權(quán)限共同決定:

判斷定位服務(wù):

/**   * 手機(jī)是否開啟位置服務(wù),如果沒有開啟那么所有app將不能使用定位功能   */  public static boolean isLocServiceEnable(Context context) {    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);    boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);    boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);    if (gps || network) {      return true;    }    return false;  }

判斷定位權(quán)限:

/**   * 檢查權(quán)限列表   *   * @param context   * @param op    這個值被hide了,去AppOpsManager類源碼找,如位置權(quán)限 AppOpsManager.OP_GPS==2   * @param opString 如判斷定位權(quán)限 AppOpsManager.OPSTR_FINE_LOCATION   * @return @see 如果返回值 AppOpsManagerCompat.MODE_IGNORED 表示被禁用了   */  public static int checkOp(Context context, int op, String opString) {    final int version = Build.VERSION.SDK_INT;    if (version >= 19) {      Object object = context.getSystemService(Context.APP_OPS_SERVICE);//      Object object = context.getSystemService("appops");      Class c = object.getClass();      try {        Class[] cArg = new Class[3];        cArg[0] = int.class;        cArg[1] = int.class;        cArg[2] = String.class;        Method lMethod = c.getDeclaredMethod("checkOp", cArg);        return (Integer) lMethod.invoke(object, op, Binder.getCallingUid(), context.getPackageName());      } catch (Exception e) {        e.printStackTrace();        if (Build.VERSION.SDK_INT >= 23) {          return AppOpsManagerCompat.noteOp(context, opString, context.getApplicationInfo().uid,              context.getPackageName());        }      }    }    return -1;  }

調(diào)用時先檢查權(quán)限:

/**   * 檢查定位服務(wù)、權(quán)限   */  private void checkLocationPermission() {    if (!AppUtil.isLocServiceEnable(this)) {//檢測是否開啟定位服務(wù)      if (netErrorDialog == null || !netErrorDialog.isShowing()) {        locErrorDialog = DialogUtil.showLocErrorDialog(activity, 0);      }    } else {//檢測用戶是否將當(dāng)前應(yīng)用的定位權(quán)限拒絕      int checkResult = AppUtil.checkOp(this, 2, AppOpsManager.OPSTR_FINE_LOCATION);//其中2代表AppOpsManager.OP_GPS,如果要判斷懸浮框權(quán)限,第二個參數(shù)需換成24即AppOpsManager。OP_SYSTEM_ALERT_WINDOW及,第三個參數(shù)需要換成AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW      int checkResult2 = AppUtil.checkOp(this, 1, AppOpsManager.OPSTR_FINE_LOCATION);      if (AppOpsManagerCompat.MODE_IGNORED == checkResult || AppOpsManagerCompat.MODE_IGNORED == checkResult2) {        if (netErrorDialog == null || !netErrorDialog.isShowing()) {          locErrorDialog = DialogUtil.showLocErrorDialog(activity, 1);        }      }    }  }

如果不能使用,彈出對話框,根據(jù)1或2,判斷跳轉(zhuǎn)頁面:

/**   * 無法定位對話框   *   * @param activity 上下文   * @param state  權(quán)限狀態(tài)0,未開啟服務(wù) 1,未開啟權(quán)限   * @return 對話框   */  public static Dialog showLocErrorDialog(Activity activity, int state) {    Dialog locErrorDialog = new Dialog(activity, R.style.MyDialog);    View contentView = View.inflate(activity, R.layout.dialog_tip_error_loc, null);    locErrorDialog.setContentView(contentView);    locErrorDialog.setCanceledOnTouchOutside(true);    locErrorDialog.show();    TextView checkNetCancel = contentView.findViewById(R.id.tv_submit_no);    TextView checkNet = contentView.findViewById(R.id.tv_submit_yes);    checkNetCancel.setOnClickListener(view -> {      locErrorDialog.dismiss();    });    checkNet.setOnClickListener(view -> {      locErrorDialog.dismiss();      Intent intent = new Intent();      if (state == 0) {        //定位服務(wù)頁面        intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);      } else {        //應(yīng)用詳情頁面        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);        intent.setData(Uri.parse("package:" + activity.getPackageName()));      }      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      try {        activity.startActivity(intent);      } catch (ActivityNotFoundException ex) {        //如果頁面無法打開,進(jìn)入設(shè)置頁面        intent.setAction(Settings.ACTION_SETTINGS);        try {          activity.startActivity(intent);        } catch (Exception e) {          e.printStackTrace();        }      }    });    return locErrorDialog;  }

Dialog樣式:

<style name="MyDialog" parent="@android:style/Theme.Dialog">    <item name="android:windowFrame">@null</item>    <item name="android:windowBackground">@android:color/transparent</item>    <item name="android:windowNoTitle">true</item>    <item name="android:background">@color/transparent</item>  </style>

以上這篇Android判斷定位功能是否可用的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临洮县| 微博| 石屏县| 米泉市| 集安市| 南澳县| 黑龙江省| 拉孜县| 丹阳市| 宽甸| 桃园市| 大石桥市| 信宜市| 翼城县| 永宁县| 体育| 沧州市| 咸阳市| 措勤县| 睢宁县| 德格县| 巩义市| 奎屯市| 新竹市| 上饶县| 当雄县| 隆子县| 阿合奇县| 兴宁市| 平昌县| 沙坪坝区| 瓦房店市| 新宾| 怀远县| 繁峙县| 长宁县| 霍林郭勒市| 宁乡县| 双流县| 孝昌县| 彝良县|