google在android 6.0系统上增加了权限申请机制,目的是保护用户的隐私,对我个人来说感觉很烦,如果一个app用到了很多权限,那么多弹一个框告诉用户,废话不多说,权限机制分三个步骤
第一步:判断是否申请了权限
第二步:没有申请,则要申请权限
第三步:权限回调处理你的业务,这是在用户同意授权的情况下
为了适配6.0以上的系统,还必须在AndroidManifest.xml文件中权限该添加的还是要添加,现在就以打电话为例,
第一步:判断是否申请了权限api:
ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED
这些权限字符串全都定义在permission内部类中了:
public final class Manifest {
public Manifest() { /* compiled code */ }
public static final class permission_group {
public static final java.lang.String CALENDAR = "android.permission-group.CALENDAR";
public static final java.lang.String CAMERA = "android.permission-group.CAMERA";
public static final java.lang.String CONTACTS = "android.permission-group.CONTACTS";
public static final java.lang.String LOCATION = "android.permission-group.LOCATION";
public static final java.lang.String MICROPHONE = "android.permission-group.MICROPHONE";
public static final java.lang.String PHONE = "android.permission-group.PHONE";
public static final java.lang.String SENSORS = "android.permission-group.SENSORS";
public static final java.lang.String SMS = "android.permission-group.SMS";
public static final java.lang.String STORAGE = "android.permission-group.STORAGE";
public permission_group() { /* compiled code */ }
}
public static final class permission {
public static final java.lang.String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES";
public static final java.lang.String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION";
public static final java.lang.String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";
public static final java.lang.String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS";
public static final java.lang.String ACCESS_NETWORK_STATE = "android.permission.ACCESS_NETWORK_STATE";
public static final java.lang.String ACCESS_NOTIFICATION_POLICY = "android.permission.ACCESS_NOTIFICATION_POLICY";
public static final java.lang.String ACCESS_WIFI_STATE = "android.permission.ACCESS_WIFI_STATE";
public static final java.lang.String ACCOUNT_MANAGER = "android.permission.ACCOUNT_MANAGER";
public static final java.lang.String ADD_VOICEMAIL = "com.android.voicemail.permission.ADD_VOICEMAIL";
public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS";
public static final java.lang.String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE";
public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
/**
* @deprecated
*/
@java.lang.Deprecated
public static final java.lang.String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE";
public static final java.lang.String BIND_CARRIER_SERVICES = "android.permission.BIND_CARRIER_SERVICES";
public static final java.lang.String BIND_CHOOSER_TARGET_SERVICE = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
public static final java.lang.String BIND_CONDITION_PROVIDER_SERVICE = "android.permission.BIND_CONDITION_PROVIDER_SERVICE";
public static final java.lang.String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN";
public static final java.lang.String BIND_DREAM_SERVICE = "android.permission.BIND_DREAM_SERVICE";
public static final java.lang.String BIND_INCALL_SERVICE = "android.permission.BIND_INCALL_SERVICE";
public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
public static final java.lang.String BIND_MIDI_DEVICE_SERVICE = "android.permission.BIND_MIDI_DEVICE_SERVICE";
public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
public static final java.lang.String BIND_QUICK_SETTINGS_TILE = "android.permission.BIND_QUICK_SETTINGS_TILE";
public static final java.lang.String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
public static final java.lang.String BIND_SCREENING_SERVICE = "android.permission.BIND_SCREENING_SERVICE";
public static final java.lang.String BIND_TELECOM_CONNECTION_SERVICE = "android.permission.BIND_TELECOM_CONNECTION_SERVICE";
public static final java.lang.String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE";
public static final java.lang.String BIND_TV_INPUT = "android.permission.BIND_TV_INPUT";
public static final java.lang.String BIND_VOICE_INTERACTION = "android.permission.BIND_VOICE_INTERACTION";
public static final java.lang.String BIND_VPN_SERVICE = "android.permission.BIND_VPN_SERVICE";
public static final java.lang.String BIND_VR_LISTENER_SERVICE = "android.permission.BIND_VR_LISTENER_SERVICE";
public static final java.lang.String BIND_WALLPAPER = "android.permission.BIND_WALLPAPER";
public static final java.lang.String BLUETOOTH = "android.permission.BLUETOOTH";
public static final java.lang.String BLUETOOTH_ADMIN = "android.permission.BLUETOOTH_ADMIN";
public static final java.lang.String BLUETOOTH_PRIVILEGED = "android.permission.BLUETOOTH_PRIVILEGED";
public static final java.lang.String BODY_SENSORS = "android.permission.BODY_SENSORS";
public static final java.lang.String BROADCAST_PACKAGE_REMOVED = "android.permission.BROADCAST_PACKAGE_REMOVED";
public static final java.lang.String BROADCAST_SMS = "android.permission.BROADCAST_SMS";
public static final java.lang.String BROADCAST_STICKY = "android.permission.BROADCAST_STICKY";
public static final java.lang.String BROADCAST_WAP_PUSH = "android.permission.BROADCAST_WAP_PUSH";
public static final java.lang.String CALL_PHONE = "android.permission.CALL_PHONE";
public static final java.lang.String CALL_PRIVILEGED = "android.permission.CALL_PRIVILEGED";
public static final java.lang.String CAMERA = "android.permission.CAMERA";
public static final java.lang.String CAPTURE_AUDIO_OUTPUT = "android.permission.CAPTURE_AUDIO_OUTPUT";
public static final java.lang.String CAPTURE_SECURE_VIDEO_OUTPUT = "android.permission.CAPTURE_SECURE_VIDEO_OUTPUT";
public static final java.lang.String CAPTURE_VIDEO_OUTPUT = "android.permission.CAPTURE_VIDEO_OUTPUT";
public static final java.lang.String CHANGE_COMPONENT_ENABLED_STATE = "android.permission.CHANGE_COMPONENT_ENABLED_STATE";
public static final java.lang.String CHANGE_CONFIGURATION = "android.permission.CHANGE_CONFIGURATION";
public static final java.lang.String CHANGE_NETWORK_STATE = "android.permission.CHANGE_NETWORK_STATE";
public static final java.lang.String CHANGE_WIFI_MULTICAST_STATE = "android.permission.CHANGE_WIFI_MULTICAST_STATE";
public static final java.lang.String CHANGE_WIFI_STATE = "android.permission.CHANGE_WIFI_STATE";
public static final java.lang.String CLEAR_APP_CACHE = "android.permission.CLEAR_APP_CACHE";
public static final java.lang.String CONTROL_LOCATION_UPDATES = "android.permission.CONTROL_LOCATION_UPDATES";
public static final java.lang.String DELETE_CACHE_FILES = "android.permission.DELETE_CACHE_FILES";
public static final java.lang.String DELETE_PACKAGES = "android.permission.DELETE_PACKAGES";
public static final java.lang.String DIAGNOSTIC = "android.permission.DIAGNOSTIC";
public static final java.lang.String DISABLE_KEYGUARD = "android.permission.DISABLE_KEYGUARD";
public static final java.lang.String DUMP = "android.permission.DUMP";
public static final java.lang.String EXPAND_STATUS_BAR = "android.permission.EXPAND_STATUS_BAR";
public static final java.lang.String FACTORY_TEST = "android.permission.FACTORY_TEST";
public static final java.lang.String GET_ACCOUNTS = "android.permission.GET_ACCOUNTS";
public static final java.lang.String GET_ACCOUNTS_PRIVILEGED = "android.permission.GET_ACCOUNTS_PRIVILEGED";
public static final java.lang.String GET_PACKAGE_SIZE = "android.permission.GET_PACKAGE_SIZE";
/**
* @deprecated
*/
@java.lang.Deprecated
public static final java.lang.String GET_TASKS = "android.permission.GET_TASKS";
public static final java.lang.String GLOBAL_SEARCH = "android.permission.GLOBAL_SEARCH";
public static final java.lang.String INSTALL_LOCATION_PROVIDER = "android.permission.INSTALL_LOCATION_PROVIDER";
public static final java.lang.String INSTALL_PACKAGES = "android.permission.INSTALL_PACKAGES";
public static final java.lang.String INSTALL_SHORTCUT = "com.android.launcher.permission.INSTALL_SHORTCUT";
public static final java.lang.String INTERNET = "android.permission.INTERNET";
public static final java.lang.String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES";
public static final java.lang.String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE";
public static final java.lang.String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
public static final java.lang.String MASTER_CLEAR = "android.permission.MASTER_CLEAR";
public static final java.lang.String MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL";
public static final java.lang.String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS";
public static final java.lang.String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE";
public static final java.lang.String MOUNT_FORMAT_FILESYSTEMS = "android.permission.MOUNT_FORMAT_FILESYSTEMS";
public static final java.lang.String MOUNT_UNMOUNT_FILESYSTEMS = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS";
public static final java.lang.String NFC = "android.permission.NFC";
public static final java.lang.String PACKAGE_USAGE_STATS = "android.permission.PACKAGE_USAGE_STATS";
/**
* @deprecated
*/
@java.lang.Deprecated
public static final java.lang.String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY";
public static final java.lang.String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS";
public static final java.lang.String READ_CALENDAR = "android.permission.READ_CALENDAR";
public static final java.lang.String READ_CALL_LOG = "android.permission.READ_CALL_LOG";
public static final java.lang.String READ_CONTACTS = "android.permission.READ_CONTACTS";
public static final java.lang.String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE";
public static final java.lang.String READ_FRAME_BUFFER = "android.permission.READ_FRAME_BUFFER";
/**
* @deprecated
*/
@java.lang.Deprecated
public static final java.lang.String READ_INPUT_STATE = "android.permission.READ_INPUT_STATE";
public static final java.lang.String READ_LOGS = "android.permission.READ_LOGS";
public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE";
public static final java.lang.String READ_SMS = "android.permission.READ_SMS";
public static final java.lang.String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS";
public static final java.lang.String READ_SYNC_STATS = "android.permission.READ_SYNC_STATS";
public static final java.lang.String READ_VOICEMAIL = "com.android.voicemail.permission.READ_VOICEMAIL";
public static final java.lang.String REBOOT = "android.permission.REBOOT";
public static final java.lang.String RECEIVE_BOOT_COMPLETED = "android.permission.RECEIVE_BOOT_COMPLETED";
public static final java.lang.String RECEIVE_MMS = "android.permission.RECEIVE_MMS";
public static final java.lang.String RECEIVE_SMS = "android.permission.RECEIVE_SMS";
public static final java.lang.String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH";
public static final java.lang.String RECORD_AUDIO = "android.permission.RECORD_AUDIO";
public static final java.lang.String REORDER_TASKS = "android.permission.REORDER_TASKS";
public static final java.lang.String REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
public static final java.lang.String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES";
/**
* @deprecated
*/
@java.lang.Deprecated
public static final java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
public static final java.lang.String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
public static final java.lang.String SEND_SMS = "android.permission.SEND_SMS";
public static final java.lang.String SET_ALARM = "com.android.alarm.permission.SET_ALARM";
public static final java.lang.String SET_ALWAYS_FINISH = "android.permission.SET_ALWAYS_FINISH";
public static final java.lang.String SET_ANIMATION_SCALE = "android.permission.SET_ANIMATION_SCALE";
public static final java.lang.String SET_DEBUG_APP = "android.permission.SET_DEBUG_APP";
/**
* @deprecated
*/
@java.lang.Deprecated
public static final java.lang.String SET_PREFERRED_APPLICATIONS = "android.permission.SET_PREFERRED_APPLICATIONS";
public static final java.lang.String SET_PROCESS_LIMIT = "android.permission.SET_PROCESS_LIMIT";
public static final java.lang.String SET_TIME = "android.permission.SET_TIME";
public static final java.lang.String SET_TIME_ZONE = "android.permission.SET_TIME_ZONE";
public static final java.lang.String SET_WALLPAPER = "android.permission.SET_WALLPAPER";
public static final java.lang.String SET_WALLPAPER_HINTS = "android.permission.SET_WALLPAPER_HINTS";
public static final java.lang.String SIGNAL_PERSISTENT_PROCESSES = "android.permission.SIGNAL_PERSISTENT_PROCESSES";
public static final java.lang.String STATUS_BAR = "android.permission.STATUS_BAR";
public static final java.lang.String SYSTEM_ALERT_WINDOW = "android.permission.SYSTEM_ALERT_WINDOW";
public static final java.lang.String TRANSMIT_IR = "android.permission.TRANSMIT_IR";
public static final java.lang.String UNINSTALL_SHORTCUT = "com.android.launcher.permission.UNINSTALL_SHORTCUT";
public static final java.lang.String UPDATE_DEVICE_STATS = "android.permission.UPDATE_DEVICE_STATS";
public static final java.lang.String USE_FINGERPRINT = "android.permission.USE_FINGERPRINT";
public static final java.lang.String USE_SIP = "android.permission.USE_SIP";
public static final java.lang.String VIBRATE = "android.permission.VIBRATE";
public static final java.lang.String WAKE_LOCK = "android.permission.WAKE_LOCK";
public static final java.lang.String WRITE_APN_SETTINGS = "android.permission.WRITE_APN_SETTINGS";
public static final java.lang.String WRITE_CALENDAR = "android.permission.WRITE_CALENDAR";
public static final java.lang.String WRITE_CALL_LOG = "android.permission.WRITE_CALL_LOG";
public static final java.lang.String WRITE_CONTACTS = "android.permission.WRITE_CONTACTS";
public static final java.lang.String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE";
public static final java.lang.String WRITE_GSERVICES = "android.permission.WRITE_GSERVICES";
public static final java.lang.String WRITE_SECURE_SETTINGS = "android.permission.WRITE_SECURE_SETTINGS";
public static final java.lang.String WRITE_SETTINGS = "android.permission.WRITE_SETTINGS";
public static final java.lang.String WRITE_SYNC_SETTINGS = "android.permission.WRITE_SYNC_SETTINGS";
public static final java.lang.String WRITE_VOICEMAIL = "com.android.voicemail.permission.WRITE_VOICEMAIL";
public permission() { /* compiled code */ }
}
运行时权限分为Noraml和Dangerous Permission或者Dangerous Permission Group
可以使用adb shell pm list permissions -d -g命令查看危险权限组
D:\study\TvView>adb shell pm list permissions -d -g
adb server version (31) doesn't match this client (36); killing...
error: protocol fault (couldn't read status): Connection reset by peer
* daemon started successfully *
Dangerous Permissions:
group:android.permission-group.PHONE_CALLS
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
group:android.permission-group.WALLPAPER
group:android.permission-group.MESSAGES
permission:android.permission.READ_SMS
permission:com.google.android.providers.talk.permission.WRITE_ONLY
permission:android.permission.RECEIVE_WAP_PUSH
permission:com.android.email.permission.READ_ATTACHMENT
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.WRITE_SMS
permission:android.permission.READ_CELL_BROADCASTS
permission:com.google.android.providers.talk.permission.READ_ONLY
group:android.permission-group.USER_DICTIONARY
permission:android.permission.READ_USER_DICTIONARY
group:com.kingroot.kinguser.permission-group.SUPERUSER
group:android.permission-group.CALENDAR
group:android.permission-group.BLUETOOTH_NETWORK
permission:android.permission.BLUETOOTH
permission:android.permission.BLUETOOTH_ADMIN
group:android.permission-group.BOOKMARKS
permission:com.android.browser.permission.READ_HISTORY_BOOKMARKS
permission:com.android.browser.permission.WRITE_HISTORY_BOOKMARKS
group:android.permission-group.CAMERA
permission:android.permission.CAMERA
group:android.permission-group.DEVELOPMENT_TOOLS
group:android.permission-group.SCREENLOCK
permission:android.permission.DISABLE_KEYGUARD
group:android.permission-group.WRITE_USER_DICTIONARY
group:android.permission-group.AUDIO_SETTINGS
group:android.permission-group.HARDWARE_CONTROLS
group:android.permission-group.VOICEMAIL
permission:com.android.voicemail.permission.ADD_VOICEMAIL
group:android.permission-group.DISPLAY
permission:android.permission.SYSTEM_ALERT_WINDOW
group:android.permission-group.APP_INFO
group:android.permission-group.SOCIAL_INFO
permission:android.permission.READ_CALL_LOG
permission:android.permission.WRITE_SOCIAL_STREAM
permission:android.permission.WRITE_CONTACTS
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.READ_SOCIAL_STREAM
permission:android.permission.READ_CONTACTS
group:android.permission-group.AFFECTS_BATTERY
permission:android.permission.CHANGE_WIFI_MULTICAST_STATE
permission:com.mediatek.permission.WAKE_DEVICE_SENSORHUB
group:android.permission-group.NETWORK
permission:android.permission.NFC
permission:android.permission.INTERNET
permission:android.permission.CHANGE_WIFI_STATE
permission:android.permission.CHANGE_WIMAX_STATE
group:android.permission-group.ACCESSIBILITY_FEATURES
group:android.permission-group.STATUS_BAR
group:android.permission-group.SYNC_SETTINGS
group:android.permission-group.PERSONAL_INFO
permission:android.permission.READ_CALENDAR
permission:android.permission.READ_PROFILE
permission:android.permission.WRITE_PROFILE
permission:android.permission.WRITE_CALENDAR
group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
group:android.permission-group.SYSTEM_CLOCK
group:android.permission-group.STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
group:android.permission-group.SYSTEM_TOOLS
permission:android.permission.ACCESS_MOCK_LOCATION
permission:com.android.launcher.permission.UNINSTALL_SHORTCUT
permission:android.permission.SUBSCRIBED_FEEDS_WRITE
permission:android.permission.CLEAR_APP_CACHE
permission:com.android.launcher.permission.INSTALL_SHORTCUT
group:android.permission-group.ACCOUNTS
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.sitemaps
permission:android.permission.USE_CREDENTIALS
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.sierrasandbox
permission:android.permission.MANAGE_ACCOUNTS
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.ah
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.cl
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.cp
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.ig
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.lh2
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.gbase
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.local
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.orkut
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.print
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.OTHER_SERVICES
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.writely
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.notebook
permission:android.permission.AUTHENTICATE_ACCOUNTS
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.knol
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.mail
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.news
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.talk
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.wifi
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.wise
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.YouTubeUser
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.androidsecure
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.grandcentral
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.jotspot
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.adsense
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.adwords
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.youtube
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.android
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.finance
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.dodgeball
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.health
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.mobile
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.sierra
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.speech
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.blogger
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.speechpersonalization
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.groups2
permission:com.google.android.googleapps.permission.GOOGLE_AUTH.sierraqa
group:android.permission-group.COST_MONEY
group:android.permission-group.DEVICE_ALARMS
group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO
ungrouped:
permission:org.simalliance.openmobileapi.SMARTCARD
permission:com.android.permission.ENABLE_HWQRCODEDISPATCHER
permission:com.huawei.phoneservice.permission.SMART_FAQS_ACCESS
permission:com.android.permission.SEND_GAME_HUAWEI
permission:com.huawei.gamebox.SEND_THIRD_COMMON_MSG
permission:com.huawei.camera.permission.QRCODE_SCAN
permission:com.huawei.phoneservice.permission.CENTER_SERVICE_ACCESS
第二步:没有申请就申请权限 api如下:
ActivityCompat.requestPermissions(final l Activity activity,final String[] permissions, final int requestCode)
第一个参数是activity
第二个参数是权限字符串数组
第三个参数是请求码 用户在用户同意授权后,如果一个界面有多个要授权,用这个在权限回调中区分
第三步:权限回调:
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
如果用户拒绝了你的权限申请你还可以友好的提示这个权限是干什么的,
使用api:
shouldShowRequestPermissionRationale(@NonNull Activity activity,@NonNull String permission)
这是我打电话的逻辑如何在6.0系统上申请权限:
package com.simple;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btn_call_phone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_call_phone = (Button) findViewById(R.id.btn_call_phone);
btn_call_phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callPhone();
}
});
}
private void callPhone() {
if(ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){//表示没有授权
//申请处理
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},1000);
}else{
call();
}
}
public void call(){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
Uri data = Uri.parse("tel:" + 110);
intent.setData(data);
startActivity(intent); // 激活Activity组件
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==1000){
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
Toast.makeText(this,"权限通过",Toast.LENGTH_SHORT).show();
call();
}else{//权限被拒绝
Toast.makeText(this,"权限被用户拒绝了",Toast.LENGTH_SHORT).show();
}
}
}
}
效果图: