android 6.0权限申请机制

使用高德定位SDK实时定位 一、目的 使用高德地图定位SDK实现实时定位并显示在UI界面上 二、SDK下载并获取Key 下载地址http://lbs.amap.com/api/android-location-sdk/download/ 获取Key Android Studio 查看安全SHA1:打开终端View---ToolWindows---Terminal,输入keytool -list -v  -k 阅读详情

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



Android 继承InCallService实现自定义电话 借鉴链接https://www.jianshu.com/p/4ae2a7512787 一、继承InCallService public class PhoneCallService extends InCallService { private final static String TAG = "PhoneCallService"; private BroadcastRe... 阅读详情

相关推荐

Androidstudio:基于Android14的通知监控服务

isListenerEnabled()){ //这里的isListenerEnabled用于判断权限是否获取。//这部分的作用是在服务被杀死后重新启动服务,防止系统杀后台导致监听服务不能持续运行。//启动权限获取界面。//notificationContent即为获取到的通知内容。//这里就已经成功获取了。// 你可以在这里添加自己的逻辑来处理通知。// 当通知被移除时调用。// 当有新通知时调用。//发送或存储通知数据的逻辑。//若已经获取权限则不执行下面的代码。

m0_72225765的博客 1582

Android VpnService 使用(一)

本篇算是VpnService 使用的第一篇文章,主要讲述service创建,intent调用.首选,我们需要调用VpnService.prepare函数. 该方法用于准备建立VPN连接.

赵航的博客 4131

Zephyr、FreeRTOS 和 RT-Thread

你是…更适合用嵌入式新手,刚接触 RTOSFreeRTOS(入门简单)IoT 项目开发,需要 BLE/WiFi/MQTTZephyr(协议全)想快速构建可部署的产品Zephyr(模块统一)只做单个任务或简单状态机控制FreeRTOS(轻量)做平台化、持续集成、自动测试Zephyr(CI 支持强)

is0815的博客 2243

Android NDK开发详解连接性之VPN 服务

原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 activity 和访问实体设备组件,例如传感器和触控输入。NDK 可能不适合大多数 Android 编程初学者,这些初学者只需使用 Java 代码和框架 API 开发应用

hnjzfwy的博客 1万+

CANoe信号传输故障排查指南

本文提供了全面的CANoe信号传输故障排查指南,涵盖从硬件连接、通道配置到软件脚本与数据库加载的全链路诊断。针对常见的通道指示灯不亮、信号无法发送及ECU握手失败等问题,给出了基于CANoe工具和CAPL脚本的详细排查步骤与解决方案,帮助工程师系统化定位并解决实车测试中的通信故障。

ice55的博客 257

采用离散模型搭建永磁同步电机控制系统

永磁同步电机发电系统分为控制器和发电机,通过simulink仿真软件进行发电系统的离散系统仿真。离散搭建仿真,可以更方便的自动代码生成。通过实践经验离散模块搭建,更能加深对整个控制系统的理解。离散系统在矢量控制中经常涉及到上个开关周期的角度,电压,或者预测下个周期的角度,电流,一般都是通过延时模块实现。PWM比较值寄存器被改写后都是使能了预装载,采样后触发计算到比较值生效可以延时0.5个开关周期Ts,也可以延时1个开关周期Ts,可以通过离散系统进行仿真,大大缩短开发周期。

f1072239934的博客 2863

android+6.0+验证机制,android 6.0权限申请机制(简单案例)

android 6.0更新了全新的权限机制,在使用一些涉及用户隐私的权限时,会让用户做出选择是否该app可以使用此权限。在查看本文章之前,希望大家可以移步官方开发文档 使用权限。在该文章中,详细描述了新版本的权限机制的更改,声明权限未发生改变,需要详细观看在运行时请求权限,查看权限最佳做法可以避免糟糕的用户体验。在权限中,分为Normal Permissions和Dangerous Permiss...

weixin_34998865的博客 317

《iOS之一起进大厂》系列-秒杀面试官的RunLoop底层原理面试题

Runloop是iOS面试中的必考题,不管大厂小厂都会问到。 这里包括了Runloop几乎所有的面试题,还有中肯完整的答案解释。

空杯子 1152

LabVIEW+图莫斯实现ECU UDS刷写工程级工具链

UDS(统一诊断服务)是汽车电子ECU刷写的核心协议标准,其关键在于满足严苛的时序确定性、NRC错误处理与Bootloader协同控制。LabVIEW凭借编译型执行引擎和实时调度能力,可保障$27安全访问、$31例程控制等微秒级响应;图莫斯硬件则提供原生UDS会话管理与高精度CAN时间戳,规避Windows调度抖动导致的NRC 0x7F或0x78超时问题。该组合摆脱了对CANoe License及LDF/A2L文件的依赖,支持直接解析S19/HEX固件并实现断点续传、日志追溯与ASIL-B合规验证,广泛应用

weixin_34319111的博客 308

把复杂计算推到数据库里:ABAP CDS View Table Function 从原理到落地实践

摘要:本文深入解析ABAP CDS Table Function技术,重点探讨其在复杂业务场景下的应用价值。当CDS View无法满足窗口函数、递归计算等高级需求时,Table Function通过结合CDS类型系统与AMDP的数据库原生计算能力,成为关键解决方案。文章详细介绍了Table Function的架构设计(CDS实体声明+AMDP实现)、客户端处理机制、开发传输流程中的注意事项,并通过航班数据示例展示最小实现闭环。这项技术特别适用于需要将复杂计算下推到数据库层的场景,能显著提升RAP和OData

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2292

增益调度控制 —— 理论、案例与交互式 GUI 实现

本文详细介绍了增益调度控制的基本原理、数学模型及公式推导,探讨了该方法在适应非线性系统和大范围工作条件下的优势与局限。通过航空飞行控制、发动机推力控制以及化工过程控制三个典型案例,我们展示了如何利用调度变量动态调整控制增益,从而使得控制系统在各个工作点均能达到优良性能。为帮助工程师和研究者更直观地理解并验证增益调度控制的实际效果,本文提供了一套基于 Python 与 PyQt6 的交互式 GUI 控制系统代码。用户不仅可以实时查看仿真数据,还能通过在线调节参数直观体验调度控制的优势。

闲人编程的博客 1480

android申请蓝牙动态权限,Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法...

为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限。蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进行权限获取需要在配置文件中申请两个权限:在代码中调用时先进行权限判断,如果没有权限就去申请权限:private void requestPermission() {if (Build.VERSION.S...

weixin_39763033的博客 713

windows中搭建sonic云真机环境/云真机环境搭建-基于docker容器部署

基于Windows系统搭建Sonic远程云真机环境实现通过浏览器操作手机端系统

雾林小妖的博客 1016

Android——Android 6.0 权限申请机制处理

Android 6.0带来了新的权限管理方式,默认情况下没有任何应用有权限去执行对其他应用、操作系统、用户有不利影响的操作,这涉及到android 6.0的 Security Architecture(安全体系结构),也是Android安全体系结构的核心,记住这句话后面可以对权限管理有个很好的理解。1.因为每一个Android 应用都是在一个进程沙盒中运行的,应用必须明确分享的资源和数据,通过申明需

Minor昔年 1万+

【C语言学习疑难杂症】第20期:0x00007FF7F2821964处引发的异常0xC0000005写入位置 0x0000000000000

检查代码中是否存在野指针访问的情况,确保在进行写入操作之前,内存已经被正确分配或初始化,并且在使用完毕后进行了正确的释放。空指针访问:代码尝试在空指针地址(0x0000000000000000)处进行写入操作,导致访问冲突。检查代码中是否存在数组越界的情况,确保在进行写入操作之前,数组的索引值在合法范围内。检查代码中是否存在空指针访问的情况,确保在进行写入操作之前,指针已经被正确初始化。野指针访问:代码尝试在已释放或未初始化的内存地址进行写入操作,导致访问冲突。

学无止境 828

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android 5.0 ~ 14访问Android/data(obb)目录的方法

众所周知,安卓每次出新版本的时候都会收紧权限,存储权限也不例外。虽说官方的意思是为了保护隐私安全,但这些改动着实令开发者和用户感到头疼,尤其是Android/data、Android/obb目录的访问。毕竟用户更难操作,开发者也要费力适配。那么今天就来探索下怎么适配这些变更点吧。

gjc91126的博客 5万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 6.0权限机制的简单封装(支持批量申请权限)

本文章是对android 6.0权限机制的简单封装,如果对权限机制不太了解可以移步android 6.0权限申请机制(简单案例),有助于你对权限机制的整体了解。 在封装的过程中出现了一个问题,给大家分享下: 在官方文档中权限的回调是这样的: @Override public void onRequestPermissionsResult(int requestCode, Strin...

weixin_33672400的博客 369

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 6.0蓝牙服务开启,Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法...

Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法发布时间:2020-08-21 00:05:08来源:脚本之家阅读:128作者:ddiagw为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限。蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进行权限获取需要在配置文件中申请两个权限:...

weixin_39528525的博客 413

Android 6.0 权限申请机制处理

转载地址:http://blog.csdn.net/u013836857/article/details/51445532 Android 6.0带来了新的权限管理方式,默认情况下没有任何应用有权限去执行对其他应用、操作系统、用户有不利影响的操作,这涉及到android 6.0的 Security Architecture(安全体系结构),也是Android安全体系结构的核心,记

七月雨的专栏 621

android 6.0蓝牙服务开启,Android应用开发之Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法...

本文将带你了解Android应用开发Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法,希望本文对大家学Android有所帮助。为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限。蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进行权限获取需要在配置文件中申请两个权限:在...

weixin_39999536的博客 372

Qt for Android 动态申请权限

一.Android 6.0权限机制 在Android 6.0 关在AndroidManifest.xml 静态申请权限不够. 需要运行时,用代码申请才能打开相应权限. 否则只让用户手动在设置找到应用打开相应权限,才能工作.体验非常之差. 比如蓝牙程序在6.0必须有定位权限的才能打开,但是Qt Android的动态申请定位权限请求时灵时不灵,有时运行很长时间均请求. 原生java 动态请求代码很容易,但Qt 需要处理工作 二.解决办法 参考 https://blog.csdn.net/zdc9023/arti

qq_40754866的博客 2214

android 6.0蓝牙,Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法

为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限。蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进行权限获取需要在配置文件中申请两个权限:在代码中调用时先进行权限判断,如果没有权限就去申请权限:private void requestPermission() {if (Build.VERSION.S...

weixin_35245810的博客 753

记Android6.0动态权限处理引发的问题

最近项目上线,有些渠道需要Apk的targetversion设置为26或以上,为此引发一系列的问题记录一下。 Android权限的动态申请 安卓6.0之前的版本,所有权限只要在文件中声明,系统都会默认给权限。安卓6.0以后,如果app的targetversion低于23的,安卓还是会使用旧版本的权限机制。高于23的,安卓会启用新的权限检测机制。那么,完整的权限申请流程是咋样的?下面会列举一下整...

h61022855的专栏 321

Android 6.0动态权限申请

Android 6.0动态权限申请 我并不希望成为白求恩一样的人,如果我写的东西对你有用,那是我最大的荣幸,但是如果不是,请抱有一丝理解,因为我写博客的最终目的只是为了记录自己生活中的点点滴滴,仅此而已,当然,我欢迎建议,我只是无视无脑的喷子而已。 作死的6.0版本一直是永远的痛,也不知道是为什么心血来潮突然想加一个动态权限申请,明明希望区别于苹果搭建一个开放的平台,或者说一直让我有这种感觉,还好...

qq_31433709的博客 2205

Android6.0 蓝牙搜索不到设备原因,MIUI权限申请机制

为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限。 蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进行权限获取 需要在配置文件中申请两个权限: "android.permission.ACCESS_COARSE_LOCATION"/>   "android.permiss

ddiagw的专栏 7462

android 6.0后台机制,Android 6.0权限机制

一:Android 6.0权限机制的基本介绍6.0以下的权限: 在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装。6.0以上的权限: 可以直接安装,当App需要我们授予不恰当的权限的时候,我们可以予以拒绝。新的权限机制(6.0以上的权限)的两种类别Normal Permissions: 这类权限一般不涉及用户隐私,是不需要用户进行授权的。Dangerous Pe...

weixin_39850697的博客 254
上一篇: android 自定义view实现刮刮卡效果
下一篇: Android RecyclerView简单使用
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值