Android6.0動的に申請する権限はどれですか?


Adroidシステム6.0以前は、Appのインストール時に権限を付与し、権限が完了してから関連するインストールを完了することができます.6.0のシステムでは、まずAppをインストールし、インストールが完了した後、関連する権限の操作を使用すると、権限のプロンプトボックスがポップアップされ、ユーザーが許可に同意してから正常に使用されます.Googleは、ユーザーが関連権限の使用をより明確に認識し、ユーザーのプライバシーをある程度人間化し、保護することができます.
Google政府は、ユーザーのプライバシーにかかわらず、ネットワークへのアクセス、携帯電話の振動など、ユーザーの権限を必要としない通常の権限(Normal Permissions)の2つに分けています.もう1つは危険権限(Dangerous Permissions)で、一般的にはユーザーのプライバシーにかかわるもので、SDカードの書き込み、カメラ、録音などを操作するユーザーの許可が必要です.
Normal Permissions:
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
Dangerous Permissions:
 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

  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

解決策
公式文書を見てみると、解決策はまだ難しくなく、面倒でもなく、もちろん以前に比べて少し煩わしいです.くだらないことは言わないで、解決策は以下の通りです.
システムバージョンの確認
private boolean canMakeSmores(){

    return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);

}

システムバージョンを確認する理由は、システム6.0以上の場合、新しい権限付与方法が必要であることが明らかです.
承認の申請
例えば、写真を撮る操作が必要な場合は、写真を撮る操作の場所に権限を加えて許可を申請する必要があります.方法は次のとおりです.
String[] perms = {"android.permission.CAMERA"};

int permsRequestCode = 200; 

requestPermissions(perms, permsRequestCode);

承認コールバック処理
@Override

public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){

    switch(permsRequestCode){

        case 200:

            boolean cameraAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;
            if(cameraAccepted){
                //      ,             
            }else{
                //        ,          
            }

            break;

    }

}

さらなる処理と完備
以上から分かるように、システムのバージョンだけをチェックして、許可された権限があれば、再び許可する必要がありますか?私たちの判断はもっと改善することができます.例えば、
private boolean hasPermission(String permission){

    if(canMakeSmores()){

        return(checkSelfPermission(permission)==PackageManager.PERMISSION_GRANTED);

    }

    return true;

}