Permisos de tiempo de ejecución del programa de Android

Los permisos comunes no se enumeran, porque son permisos comunes excepto los permisos peligrosos.
Los permisos y grupos de permisos peligrosos específicos son los siguientes:

  • CALENDARIO

  • READ_CALENDAR

  • WRITE_CALENDAR

  • CÁMARA

  • CÁMARA

  • CONTACTOS

  • READ_CONTACTS

  • WRITE_CONTACTS

  • GET_ACCOUNTS

  • UBICACIÓN

  • ACCESS_FINE_LOCATION

  • ACCESS_COARSE_LOCATION

  • MICRÓFONO

  • GRABAR AUDIO

  • TELÉFONO

  • READ_PHONE_STATE

  • LLAMADA TELEFÓNICA

  • READ_CALL_LOG

  • WRITE_CALL_LOG

  • ADD_VOICEMAIL

  • USE_SIP

  • PROCESS_OUTGOING_CALLS

  • SENSORES

  • BODY_SENSORS

  • SMS

  • ENVIAR SMS

  • RECEIVE_SMS

  • READ_SMS

  • RECEIVE_WAP_PUSH

  • RECEIVE_MMS

  • ALMACENAMIENTO

  • READ_EXTERNAL_STORAGE

  • WRITE_EXTERNAL_STORAGE

También tenga en cuenta : cada permiso peligroso en la tabla pertenece a un grupo de permisos. Usamos el nombre del permiso cuando procesamos el permiso de tiempo de ejecución, pero una vez que el usuario está autorizado por la misma autoridad, todos los demás permisos en el grupo de permisos correspondiente al permiso son también será autorizado al mismo tiempo.

Permisos en tiempo de ejecución:

说白了用过智能手机的都知道,也就是在刚刚下载的App打开时,可能是照相,那么系统将会询问你是否授权摄像头权限,打开相册时是否允许访问相册,所以在这里运行时的权限是很好理解的,不再解释那么多。

Creemos un nuevo proyecto RuntimePermissionTest .

Aquí usamos el permiso CALL_PHONE como ejemplo.

El permiso CALL_PHONE debe declararse al escribir la función de llamada, porque la llamada implicará la tarifa del teléfono móvil del usuario, por lo que figura como un permiso peligroso.

Primero modifique el archivo de diseño activity_main.xml de la siguiente manera:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    >

    <Button

    android:id="@+id/make_call"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:text="make Call"

    />

    </LinearLayout>

Cuando se hace clic en el botón, se activa la lógica de realizar una llamada.

Modificar MainActivity

  public class MainActivity extends AppCompatActivity {
    
    

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {
    
    

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Button makeCall = (Button) findViewById(R.id.make_call);

    makeCall.setOnClickListener(new View.OnClickListener() {
    
    

    @Override

    public void onClick(View v) {
    
    

    //第一步就是判断用户是不是已经给过我们授权了,借助的是ContextCompat.checkSelfPermission()方法。

    //checkSelfPermission()方法接收两个参数,第一个参数是Context,第二个参数是权限名。

    //然后使用方法的返回值和PackageManager.PERMISSION_GRANTED作比较,相等就说明用户已经授权。

    if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
    
    

    ActivityCompat.requestPermissions(MainActivity.this,new String[]{
    
    Manifest.permission.CALL_PHONE},1);

    //如果没有授权的话,则需要调用ActivityCompat.requestPermissions()方法来向用户申请授权。

    //requestPermissions接收三个参数,第一个参数要求是Activity的实例,第二个参数是一个String数组,我们要把申请的权限名放在数组中即可。

    //第三个参数是请求码,只要是唯一值就可以了。这里传入1.

    }else{
    
    

    call();

    //如果授权的话,直接执行拨打电话的逻辑操作。

    }

    }

    });

    }

    private void call(){
    
    

    try{
    
    

    Intent intent = new Intent(Intent.ACTION_CALL);

    intent.setData(Uri.parse("tel:10086"));

    startActivity(intent);

    }catch (SecurityException e){
    
    

    e.printStackTrace();

    }

    }

    //调用完了requestPermissions()方法之后,系统会弹出一个权限申请的对话框,然后用户可以选择同意或者拒绝。

    //不论是哪种结果,最终都会调到onRequestPermissionsResult()方法中,而授权的结果则会封装在grantResults参数中。

    @Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    
    

    switch(requestCode){
    
    

    case 1:

    //判断最后的授权结果,如果用户同意就调用call()方法来拨打电话。如果用户拒绝的话我们只能放弃操作,并弹出一条失败提示。

    if (grantResults.length > 0 &&grantResults[0] == PackageManager.PERMISSION_GRANTED){
    
    

    call();

    }else{
    
    

    Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();

    }

    break;

    default:

    }

    }

    }

Ejecutar la aplicación de permisos del programa
Permiso de aplicación para ejecutar el programa
Solicitud de permiso para ejecutar el programa rechazada

Supongo que te gusta

Origin blog.csdn.net/i_nclude/article/details/77649088
Recomendado
Clasificación