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

首頁 > 系統 > Android > 正文

安卓Android6.0權限動態獲取操作示例

2019-10-22 18:15:19
字體:
來源:轉載
供稿:網友

本文實例講述了安卓Android6.0權限動態獲取操作。分享給大家供大家參考,具體如下:

眾所周知 , 安卓6.0現在運用的越來越廣泛 , 因為相對于之前的幾個版本 , 對于用戶權限這個概念確實不是很重視 , 而6.0 之后 , 為了提升用戶的操作安全性 ,  運行時權限誕生了, 就是在用戶運行軟件的時候動態獲取所需要的權限 , 下面跟大家分享一個我的代碼案例 :

import android.Manifest;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.provider.Settings;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.view.KeyEvent;import java.util.ArrayList;import java.util.List;/** * 繼承了Activity,實現Android6.0的運行時權限檢測 * 需要進行運行時權限檢測的Activity可以繼承這個類 * * @author xingtao sun * @創建時間:2016年12月28日 * @項目名稱: 安卓6.0運行時權限 */public class CheckPermissionsActivity extends AppCompatActivity    implements    ActivityCompat.OnRequestPermissionsResultCallback {  /**   * 需要進行檢測的權限數組 這里只列舉了幾項 小伙伴可以根據自己的項目需求 來添加   */  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 boolean isNeedCheck = true;  @Override  protected void onResume() {    super.onResume();    if (isNeedCheck) {      checkPermissions(needPermissions);    }  }  /**   * 檢查權限   */  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);    }  }  /**   * 獲取權限集中需要申請權限的列表   *   * @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;  }  /**   * 檢測是否有的權限都已經授權   *   * @param grantResults   */  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;      }    }  }  /**   * 彈出對話框, 提示用戶手動授權   *   */  private void showMissingPermissionDialog() {    AlertDialog.Builder builder = new AlertDialog.Builder(this);    builder.setTitle(R.string.notifyTitle);    builder.setMessage(R.string.notifyMsg);    // 拒絕授權 退出應用    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();}/** * 啟動應用的設置 * */private void startAppSettings() {  Intent intent = new Intent(      Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  intent.setData(Uri.parse("package:" + getPackageName()));  startActivity(intent);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {  if (keyCode == KeyEvent.KEYCODE_BACK) {    this.finish();    return true;  }  return super.onKeyDown(keyCode, event);}

string資源

<resources>  <string name="app_name">My Library</string>  <string name="notifyTitle">提示</string>  <string name="notifyMsg">當前應用缺少必要權限。/n/n請點擊/"設置/"-/"權限/"-打開所需權限。</string>  <string name="setting">設置</string>  <string name="cancel">取消</string></resources>

送上效果圖

安卓,Android6.0,權限,動態

 

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 女性| 保山市| 遵化市| 布拖县| 交城县| 洪泽县| 疏勒县| 乌什县| 萨嘎县| 郓城县| 乐东| 湟中县| 五原县| 汪清县| 洞头县| 寻甸| 嘉义市| 奇台县| 潍坊市| 阿合奇县| 天祝| 余庆县| 信丰县| 仲巴县| 阳谷县| 金昌市| 乌拉特后旗| 西乡县| 增城市| 长白| 大英县| 通江县| 石棉县| 永嘉县| 洱源县| 滦南县| 夏邑县| 长丰县| 奎屯市| 叶城县| 托克逊县|