Android学習の6.0システムランタイム権限設定


今日、仕事の中で出会った6.0の実行時の権限処理の問題について話します.原因はバージョンの更新を設定することです.6.0システムでエラーが発生します.原因は6.0の動的権限設定です.googleでは安全のために、特定の権限についてお客様の権限を尋ねます.これはもちろん、お客様の資料の安全性を大幅に増加させます.もちろん、仕事の中で小さな変動をさせます.私が仕事でどのようにこれらの問題を解決したのかについてお話しします.
まずcopyを6.0にするとユーザーの権限が求められます
//        
group:android.permission-group.CONTACTS
  permission:android.permission.WRITE_CONTACTS
  permission:android.permission.GET_ACCOUNTS
  permission:android.permission.READ_CONTACTS
//      
group:android.permission-group.PHONE
  permission:android.permission.READ_CALL_LOG
  permission:android.permission.READ_PHONE_STATE
  permission:android.permission.CALL_PHONE
  permission:android.permission.WRITE_CALL_LOG
  permission:android.permission.USE_SIP
  permission:android.permission.PROCESS_OUTGOING_CALLS
  permission:com.android.voicemail.permission.ADD_VOICEMAIL
//    
group:android.permission-group.CALENDAR
  permission:android.permission.READ_CALENDAR
  permission:android.permission.WRITE_CALENDAR
//    
group:android.permission-group.CAMERA
  permission:android.permission.CAMERA

//     
group:android.permission-group.SENSORS
  permission:android.permission.BODY_SENSORS
//    
group:android.permission-group.LOCATION
  permission:android.permission.ACCESS_FINE_LOCATION
  permission:android.permission.ACCESS_COARSE_LOCATION
//      
group:android.permission-group.STORAGE
  permission:android.permission.READ_EXTERNAL_STORAGE
  permission:android.permission.WRITE_EXTERNAL_STORAGE
//    
group:android.permission-group.MICROPHONE
  permission:android.permission.RECORD_AUDIO
//SMS    
group:android.permission-group.SMS
  permission:android.permission.READ_SMS
  permission:android.permission.RECEIVE_WAP_PUSH
  permission:android.permission.RECEIVE_MMS
  permission:android.permission.RECEIVE_SMS
  permission:android.permission.SEND_SMS
  permission:android.permission.READ_CELL_BROADCASTS

以上のcopyは鴻洋大神の紹介から、私はあまり言わないで、みんなは少し理解すればいいので、以下はバージョンの更新中の6.0権限を例にして、どのように動的に権限を追加するかを学びます
permission.WRITE_EXTERNAL_STORAGEは6.0権限で、バージョン更新でこの権限が使用されます
  private void uploadVersion() {
        //       
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        //           ,context,    ,int   
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1001);
        } else {
            //            
            GetVersionEngine engine = new GetVersionEngine(getRequestTag());
            engine.sendRequest();
        }
    }

権限要求の処理
  @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1001) {//     
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //      ,        
                GetVersionEngine engine = new GetVersionEngine(getRequestTag());
                engine.sendRequest();
            } else
            {
                //     ,      
            }
        }
    }

はい、動的に6.0権限を設定するのは簡単ですが、皆さんは知っていればいいです.主な問題は、どの権限が6.0で動的に取得する権限なのかを知ることです.
次に6.0権限使用ライブラリをお勧めします.結局、そんなに多くの権限があるので、私たちが1つずつ設定するのは面倒です.だから、事前に私たちが使う6.0動的取得権限を許可すれば、便利です.
PermissionGen
使用方法:
依存を追加:
compile 'com.lovedise:permissiongen:0.0.6'

権限を要求する2つの方法:
PermissionGen.with(MainActivity.this)
    .addRequestCode(100)
    .permissions(
        Manifest.permission.READ_CONTACTS,
        Manifest.permission.RECEIVE_SMS,
        Manifest.permission.WRITE_CONTACTS)
    .request();
PermissionGen.needPermission(ContactFragment.this, 100, 
    new String[] {
        Manifest.permission.READ_CONTACTS, 
        Manifest.permission.RECEIVE_SMS,
        Manifest.permission.WRITE_CONTACTS
    }
);

権限リクエストの結果
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions,
      int[] grantResults) {
    PermissionGen.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}

リクエスト成功
@PermissionSuccess(requestCode = 100)
public void doSomething(){
    Toast.makeText(this, "Contact permission is granted", Toast.LENGTH_SHORT).show();
}

リクエストに失敗しました
@PermissionFail(requestCode = 100)
public void doFailSomething(){
    Toast.makeText(this, "Contact permission is not granted", t.LENGTH_SHORT).show();
}

これは非常に簡単な6.0権限処理ライブラリです.皆さん参考にしてください.