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:
解決策
公式文書を見てみると、解決策はまだ難しくなく、面倒でもなく、もちろん以前に比べて少し煩わしいです.くだらないことは言わないで、解決策は以下の通りです.
システムバージョンの確認
システムバージョンを確認する理由は、システム6.0以上の場合、新しい権限付与方法が必要であることが明らかです.
承認の申請
例えば、写真を撮る操作が必要な場合は、写真を撮る操作の場所に権限を加えて許可を申請する必要があります.方法は次のとおりです.
承認コールバック処理
さらなる処理と完備
以上から分かるように、システムのバージョンだけをチェックして、許可された権限があれば、再び許可する必要がありますか?私たちの判断はもっと改善することができます.例えば、
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;
}