Android危险权限与动态申请

Posted 格拉格拉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android危险权限与动态申请相关的知识,希望对你有一定的参考价值。

危险权限:

权限组名权限名称
CALENDAR(日历)READ_CALENDAR
WRITE_CALENDAR
CAMERA(相机)CAMERA
CONTACTS(联系人)READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
LOCATION(位置)ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
MICROPHONE(麦克风)RECORD_AUDIO
PHONE(手机)READ_PHONE_STATE
CALL_PHONE
ERAD_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
SENSORS(传感器)BODY_SENSORS
SMS(短信)SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE(存储卡)READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE

动态申请:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    requestPermission();//权限申请
private void requestPermission()

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        if (checkSelfPermission(READ_PHONE_STATE) != PERMISSION_GRANTED
                || checkSelfPermission(WRITE_EXTERNAL_STORAGE) != PERMISSION_GRANTED
        ) 
            if (shouldShowRequestPermissionRationale( READ_PHONE_STATE)
                    ||shouldShowRequestPermissionRationale( WRITE_EXTERNAL_STORAGE)
            )
            
                requestPermissions(new String[]READ_PHONE_STATE,WRITE_EXTERNAL_STORAGE,502);
             else 
                ActivityCompat.requestPermissions(this,new String[]READ_PHONE_STATE,WRITE_EXTERNAL_STORAGE,501);
            
        
    
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) 
            case 501: 
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED&& grantResults[1] == PackageManager.PERMISSION_GRANTED)
                
//                    Log.i(TAG,"onRequestPermissionsResult granted");
                 else
                
//                    Log.i(TAG,"onRequestPermissionsResult denied");
                    showWaringDialog();
                
                return;
            
        
    

private void showWaringDialog() 
    AlertDialog dialog = new AlertDialog.Builder(this)
            .setTitle("警告:")
            .setMessage("请前往设置->应用->应用名->权限中打开相关权限,否则游戏无法正常运行!")
            .setPositiveButton("确定", new DialogInterface.OnClickListener() 
                @Override
                public void onClick(DialogInterface dialog, int which) 
                    // 一般情况下如果用户不授权的话,功能是无法运行的,做退出处理
                    finish();
                
            ).show();

以上是关于Android危险权限与动态申请的主要内容,如果未能解决你的问题,请参考以下文章

Android权限完全解析

Android权限完全解析

Android权限完全解析

Unity在Android 6.0及以上版本弹出权限申请窗口的问题

Android系统动态申请权限的机制流程总结

Android如何动态申请应用权限?