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(); } } } } 效果图: