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

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

Android 6.0動(dòng)態(tài)權(quán)限及跳轉(zhuǎn)GPS設(shè)置界面的方法

2019-10-21 21:44:14
字體:
供稿:網(wǎng)友

1.動(dòng)態(tài)權(quán)限申請(qǐng)

模糊的位置信息android.permission.ACCESS_COARSE_LOCATION權(quán)限為例

在AndroidManifest文件中加入權(quán)限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

然后java代碼中動(dòng)態(tài)申請(qǐng)

//動(dòng)態(tài)申請(qǐng)權(quán)限的測(cè)試方法public void test() { // 要申請(qǐng)的權(quán)限 數(shù)組 可以同時(shí)申請(qǐng)多個(gè)權(quán)限 String[] permissions = {Manifest.permission.ACCESS_COARSE_LOCATION}; if (Build.VERSION.SDK_INT >= 23) {  //如果超過6.0才需要?jiǎng)討B(tài)權(quán)限,否則不需要?jiǎng)討B(tài)權(quán)限  //如果同時(shí)申請(qǐng)多個(gè)權(quán)限,可以for循環(huán)遍歷  int check = ContextCompat.checkSelfPermission(this,permissions[0]);  // 權(quán)限是否已經(jīng) 授權(quán) GRANTED---授權(quán) DINIED---拒絕  if (check == PackageManager.PERMISSION_GRANTED) {   //寫入你需要權(quán)限才能使用的方法   run();  } else {   //手動(dòng)去請(qǐng)求用戶打開權(quán)限(可以在數(shù)組中添加多個(gè)權(quán)限) 1 為請(qǐng)求碼 一般設(shè)置為final靜態(tài)變量   requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);  } } else {  //寫入你需要權(quán)限才能使用的方法  run(); }}

其中run()為你自己需要權(quán)限才能執(zhí)行的方法

然后重寫申請(qǐng)權(quán)限的回掉方法

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,          @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); //回調(diào),判斷用戶到底點(diǎn)擊是還是否。 //如果同時(shí)申請(qǐng)多個(gè)權(quán)限,可以for循環(huán)遍歷 if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {  //寫入你需要權(quán)限才能使用的方法  run(); } else {  // 沒有獲取 到權(quán)限,從新請(qǐng)求,或者關(guān)閉app  Toast.makeText(this,"需要獲得XXX權(quán)限",Toast.LENGTH_SHORT).show(); }}

2.跳轉(zhuǎn)GPS設(shè)置界面

相關(guān)字符串

<string name="notifyTitle">提示</string><string name="notifyMsg">當(dāng)前應(yīng)用缺少必要權(quán)限。/n/n請(qǐng)點(diǎn)擊/"設(shè)置/"-/"權(quán)限/"-打開所需權(quán)限。</string><string name="gpsNotifyMsg">當(dāng)前應(yīng)用需要打開定位功能。/n/n請(qǐng)點(diǎn)擊/"設(shè)置/"-/"定位服務(wù)/"-打開定位功能。</string><string name="setting">設(shè)置</string><string name="cancel">取消</string>

java代碼

private int GPS_REQUEST_CODE = 10;/** * 檢測(cè)GPS是否打開 * * @return */private boolean checkGPSIsOpen() { boolean isOpen; LocationManager locationManager = (LocationManager) this   .getSystemService(Context.LOCATION_SERVICE); isOpen = locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER); return isOpen;}/** * 跳轉(zhuǎn)GPS設(shè)置 */private void openGPSSettings() { if (checkGPSIsOpen()) {  initLocation(); //自己寫的定位方法 } else {  //沒有打開則彈出對(duì)話框  new AlertDialog.Builder(this)    .setTitle(R.string.notifyTitle)    .setMessage(R.string.gpsNotifyMsg)    // 拒絕, 退出應(yīng)用    .setNegativeButton(R.string.cancel,      new DialogInterface.OnClickListener() {       @Override       public void onClick(DialogInterface dialog, int which) {        finish();       }      })    .setPositiveButton(R.string.setting,      new DialogInterface.OnClickListener() {       @Override       public void onClick(DialogInterface dialog, int which) {        //跳轉(zhuǎn)GPS設(shè)置界面        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);        startActivityForResult(intent, GPS_REQUEST_CODE);       }      })    .setCancelable(false)    .show(); }}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == GPS_REQUEST_CODE) {  //做需要做的事情,比如再次檢測(cè)是否打開GPS了 或者定位  openGPSSettings(); }}

最后在需要的地方調(diào)用 openGPSSettings()方法。

效果(是在相關(guān)權(quán)限是已經(jīng)申請(qǐng)好的情況下的效果)

Android 6.0,動(dòng)態(tài)權(quán)限,跳轉(zhuǎn),GPS

3.下面是我在高德地圖Demo中看見的檢測(cè)權(quán)限的Activity

public class CheckPermissionsActivity extends Activity implements  ActivityCompat.OnRequestPermissionsResultCallback { /**  * 需要進(jìn)行檢測(cè)的權(quán)限數(shù)組  */ protected String[] needPermissions = {   Manifest.permission.ACCESS_COARSE_LOCATION,   Manifest.permission.ACCESS_FINE_LOCATION,   Manifest.permission.WRITE_EXTERNAL_STORAGE,   Manifest.permission.READ_EXTERNAL_STORAGE,   Manifest.permission.READ_PHONE_STATE }; private static final int PERMISSON_REQUESTCODE = 0; private static final int SETTING_REQUESTCODE = 1; /**  * 判斷是否需要檢測(cè),防止不停的彈框  */ private boolean isNeedCheck = true; @Override protected void onResume() {  super.onResume();  if (isNeedCheck) {   checkPermissions(needPermissions);  } } /**  * @param permissions  * @since 2.5.0  */ private void checkPermissions(String... permissions) {  List<String> needRequestPermissonList = findDeniedPermissions(permissions);  if (null != needRequestPermissonList    && needRequestPermissonList.size() > 0) {   ActivityCompat.requestPermissions(this,     needRequestPermissonList.toArray(       new String[needRequestPermissonList.size()]),     PERMISSON_REQUESTCODE);  } } /**  * 獲取權(quán)限集中需要申請(qǐng)權(quán)限的列表  *  * @param permissions  * @return  * @since 2.5.0  */ private List<String> findDeniedPermissions(String[] permissions) {  List<String> needRequestPermissonList = new ArrayList<String>();  for (String perm : permissions) {   if (ContextCompat.checkSelfPermission(this,     perm) != PackageManager.PERMISSION_GRANTED     || ActivityCompat.shouldShowRequestPermissionRationale(     this, perm)) {    needRequestPermissonList.add(perm);   }  }  return needRequestPermissonList; } /**  * 檢測(cè)是否說有的權(quán)限都已經(jīng)授權(quán)  *  * @param grantResults  * @return  * @since 2.5.0  */ private boolean verifyPermissions(int[] grantResults) {  for (int result : grantResults) {   if (result != PackageManager.PERMISSION_GRANTED) {    return false;   }  }  return true; } @Override public void onRequestPermissionsResult(int requestCode,           String[] permissions, int[] paramArrayOfInt) {  if (requestCode == PERMISSON_REQUESTCODE) {   if (!verifyPermissions(paramArrayOfInt)) {    showMissingPermissionDialog();    isNeedCheck = false;   }  } } /**  * 顯示提示信息  *  * @since 2.5.0  */ private void showMissingPermissionDialog() {  AlertDialog.Builder builder = new AlertDialog.Builder(this);  builder.setTitle(R.string.notifyTitle);  builder.setMessage(R.string.notifyMsg);  // 拒絕, 退出應(yīng)用  builder.setNegativeButton(R.string.cancel,    new DialogInterface.OnClickListener() {     @Override     public void onClick(DialogInterface dialog, int which) {      finish();     }    });  builder.setPositiveButton(R.string.setting,    new DialogInterface.OnClickListener() {     @Override     public void onClick(DialogInterface dialog, int which) {      startAppSettings();     }    });  builder.setCancelable(false);  builder.show(); } /**  * 啟動(dòng)應(yīng)用的設(shè)置  *  * @since 2.5.0  */ private void startAppSettings() {  Intent intent = new Intent(    Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  intent.setData(Uri.parse("package:" + getPackageName()));  startActivityForResult(intent, SETTING_REQUESTCODE); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) {  if (keyCode == KeyEvent.KEYCODE_BACK) {   this.finish();   return true;  }  return super.onKeyDown(keyCode, event); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {  super.onActivityResult(requestCode, resultCode, data);  if (requestCode == SETTING_REQUESTCODE) {   checkPermissions(needPermissions);  } }}

繼承于CheckPermissionsActivity即可

不允許就跳轉(zhuǎn)系統(tǒng)設(shè)置界面,若沒設(shè)置再次檢測(cè)權(quán)限并申請(qǐng),直到允許為止。可和GPS設(shè)置搭配使用

Android 6.0,動(dòng)態(tài)權(quán)限,跳轉(zhuǎn),GPS

以上這篇Android 6.0動(dòng)態(tài)權(quán)限及跳轉(zhuǎn)GPS設(shè)置界面的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 德钦县| 万山特区| 增城市| 砚山县| 嘉黎县| 宝鸡市| 金溪县| 余姚市| 皋兰县| 石河子市| 汝州市| 扎鲁特旗| 云龙县| 鹤庆县| 叙永县| 丹东市| 尼勒克县| 林口县| 大英县| 桐庐县| 黔南| 遂宁市| 崇仁县| 龙川县| 定州市| 宾阳县| 酒泉市| 长治县| 孟津县| 天峻县| 平罗县| 年辖:市辖区| 福州市| 通化县| 苏尼特右旗| 乌拉特前旗| 琼海市| 托克托县| 隆昌县| 成都市| 临潭县|