Práctica de aprendizaje de la aplicación de permisos de Android

1. Introducción

Antes de cambiar a un teléfono Android, la impresión del sistema Android es la pista de la aplicación del sistema. La aplicación puede solicitar varios permisos a voluntad y robar privacidad a voluntad. Después de cambiar el teléfono móvil, se sabe que el sistema Android tiene una gran administración de permisos En otras palabras, cada permiso peligroso solicitado requiere que se lo solicite al usuario. Por supuesto, Android solo le solicita al usuario lo más posible. Todavía hay casos en los que el usuario no acepta usarlo.

La mejora de la administración de permisos agrega una cierta cantidad de trabajo a los desarrolladores. Solicitar permisos peligrosos ya no es una simple cuestión de agregar una línea de código en AndroidManifest.xml, sino la necesidad de solicitar a los usuarios que soliciten dinámicamente. Después de comprender la aplicación dinámica, no creo que sea demasiado complicado, pero cuando no lo sé, solo sé cómo copiar en línea los fragmentos de código ya preparados y no sé por dónde empezar cuando necesito solicitar nuevos permisos. Una vez pegué algunas piezas de código de permiso de aplicación dinámico, solo porque no entiendo el principio, solo lo copio y lo pego. Aunque el código puede ejecutarse, está extremadamente hinchado.

Con este fin, a través de este artículo para ordenar los permisos de Android, con el fin de dominar la administración de permisos de Android, se negó a ser un ingeniero de copia.

2. El papel de la autoridad.

El propósito de los permisos es proteger la privacidad de los usuarios de Android. Como un sistema de código abierto que se puede personalizar arbitrariamente, los permisos son realmente la última barrera para la privacidad del usuario. El sistema Android requiere que, por defecto, ninguna aplicación tenga derecho a realizar operaciones que afecten negativamente a otras aplicaciones, sistemas operativos o usuarios. Incluyendo leer y escribir datos privados del usuario (como contactos o correo electrónico), leer y escribir archivos de otras aplicaciones, acceder a la red, etc. Para realizar estas operaciones, la aplicación de Android debe obtener los permisos correspondientes.

Android tiene cientos de permisos, que se pueden dividir en tres categorías, uno son permisos ordinarios, el otro son permisos de firma y el otro son permisos peligrosos.

Entre ellos, los permisos ordinarios se refieren a aquellos que no amenazan la seguridad y la privacidad de los usuarios, como establecer permisos de despertador. La concesión de permisos normales para la aplicación solo debe declararse en el archivo AndroidManifest.xml, el sistema lo autorizará automáticamente, no se requiere confirmación del usuario y el usuario no puede realizar la operación de revocación.

El segundo tipo es el permiso de firma. Este tipo de permiso también es otorgado por el sistema cuando se instala la aplicación, pero no se otorga incondicionalmente. La aplicación que quiere usar el permiso debe usar el mismo certificado que la aplicación que define el permiso. Por ejemplo, la aplicación A Firmar con el certificado A define un permiso de firma. La aplicación B quiere usar este permiso y debe estar firmado por el certificado A. El escenario en el que se usan los permisos de firma es tal que una empresa tiene varias aplicaciones. Para permitir que estas aplicaciones se llamen entre sí, pero no quieren que las aplicaciones externas lo llamen, puede implementar un permiso de llamada de firma personalizado.

Finalmente, veamos el tercer tipo de permisos peligrosos. La razón por la cual los permisos peligrosos son peligrosos es porque dichos permisos involucran los recursos de datos confidenciales personales del usuario o afectan los datos almacenados del usuario u otros datos de la aplicación, como leer los contactos del usuario y abrir Ha habido rumores sobre micrófonos, etc. En la actualidad, muchas aplicaciones abrirán secretamente el micrófono para espiar la conversación del usuario y luego presionarán con precisión el anuncio de acuerdo con el contenido de la conversación. Tales rumores son como leyendas urbanas. Debido a la misteriosa actuación, están muy difundidos. Para obtener permisos peligrosos, una aplicación debe indicar al usuario que la aplicación no puede obtener permisos hasta que el usuario lo permita. Sin embargo, el sistema Android es de código abierto después de todo. Es posible modificar la función nativa de administración de permisos de Android. Aunque el usuario no estuvo de acuerdo, la aplicación aún puede obtener permisos. Este tema está más allá del alcance de este artículo. Personalmente, creo que hay otras formas mejores de robar privacidad Escuchar a escondidas en las conversaciones es el tipo de costo más alto, que no vale la pena usar.

Como se mencionó anteriormente, hay cientos de permisos, y no es realista recordar uno por uno. De hecho, mientras sepamos cuáles son los permisos peligrosos, los permisos peligrosos son permisos ordinarios.

Los permisos peligrosos se dividen en 9 grupos en total y 24 permisos. Si los permisos que solicitamos no están en esta tabla, significa que son permisos ordinarios, y la agrupación de permisos significa que estos permisos en el grupo pertenecen al mismo grupo, y el usuario acepta autorizar un grupo de permisos. Luego, se otorgarán todos los permisos en el grupo. Por ejemplo, después de que se otorgue a la aplicación el permiso READ_EXTERNAL_STORAGE, si solicita el permiso WRITE_EXTERNAL_STORAGE nuevamente, el sistema otorgará el permiso de inmediato y ya no solicitará al usuario.
Inserte la descripción de la imagen aquí

3. Pasos y ejemplos para solicitar permiso

  1. Solicitar permisos normales es simple, solo solicite en el archivo AndroidManifest.xml, por ejemplo, solicite permiso para configurar la alarma
<uses-permission android:name="android.permission.SET_ALARM" />
  1. La solicitud de permiso de firma es similar, solo necesita modificar el Nivel de protección en la firma, por ejemplo, establecer un permiso personalizado en el permiso de firma, el código es el siguiente, otras aplicaciones deben tener la misma firma para otorgar este permiso.
    <permission
     android:name="com.test.permission.act"
     android:protectionLevel="signature"/>
    
  2. Punto importante para solicitar permisos peligrosos. Por un lado, como los permisos ordinarios, todavía debe declararse en el archivo AndroidManifest.xml. Por otro lado, se requieren aplicaciones dinámicas adicionales. Lo siguiente utiliza la aplicación de permisos de lectura y escritura de almacenamiento como ejemplo.
  • Declarado en el archivo AndroidManifest, este paso es esencial

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    • Verifique los permisos en el código de inicio de la aplicación para confirmar si la aplicación ya tiene permisos de almacenamiento de lectura y escritura. Esta parte se implementa en el código, por lo que se llama aplicación dinámica. El uso de Android en ContextCompat.checkSelfPermission()los derechos de autorización de cheques, este primer parámetro del método es el Contexto contexto, el segundo parámetro es el nombre que desea solicitar un permiso, por supuesto, no puede simplemente escribir el nombre de Tun Ciudad, pero hay un nombre específico, la propuesta sintonizar directamente en Android Manifest.permissionha sido El nombre definido, por ejemplo, el permiso de almacenamiento externo de lectura que se aplicará por ahora es Manifest.permission.WRITE_EXTERNAL_STORAGE. Este método devuelve un tipo int PERMISSION_GRANTED(同意)o PERMISSION_DENIED`(拒绝). En términos generales, después de que el programa se instala por primera vez, los permisos solicitados están todos en el PERMISSION_DENIEDestado. Debe solicitarlo. No necesita volver a solicitarlo después de que el usuario esté de acuerdo, a menos que desinstale la aplicación y la reinstale o desactive los permisos en la configuración del sistema;

    • El siguiente paso es solicitar un permiso. requestPermissions()El método utilizado para solicitarlo. Se pasan tres parámetros en este método. El primero es Actividad y el segundo es una serie de cadenas de permisos que requieren autorización. Puede incluir los nombres de los permisos que desea solicitar. El tercero es el código de solicitud que identifica la solicitud de permiso. Se utiliza en la función de devolución de llamada para la solicitud de permiso onRequestPermissionsResult(). Este valor debe ser mayor o igual a 0. Su función se describirá en detalle en la función de devolución de llamada. Aquí, siempre que se entienda como una etiqueta personalizada. Cabe señalar que la solicitud de permiso se procesa de forma asíncrona, es decir, el código no bloqueará la espera de que el usuario haga clic, sino la devolución de llamada después de que el usuario haga clic onRequestPermissionsResult(). El código para los dos pasos anteriores es el siguiente:

 //检查应用是否已经拥有权限
 if(ActivityCompat.checkSelfPermission(MainActivity.this,
               Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
           // 说明没有该权限,就需要申请权限
           ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
       }else {
           //已经拥有权限,做进一步操作
       }
  • Lo siguiente es sobrescribir la función de devolución de llamada de permiso de la aplicación onRequestPermissionsResult(), y hacer un procesamiento de seguimiento para la aplicación de permiso. La función de devolución de llamada tiene tres resultados de retorno. El primero requestCode, este parámetro es requestPermissions()el código de solicitud para identificar el permiso mencionado, la función es un número de recibo, según Podemos determinar el resultado del procesamiento del número de orden, es decir, pasar este parámetro al solicitar el permiso. Una vez que se complete el procesamiento, la función de devolución de llamada se devolverá sin cambios, para que sepamos si es nuestro resultado de procesamiento. ; El segundo parámetro es la matriz de cadena de permisos, que es requestPermissions()la matriz de cadena de permisos que estamos llenando; el tercer parámetro es la matriz de respuesta del usuario, la aprobación del usuario de cada solicitud de permiso está en esta matriz, esta matriz El número es correspondencia uno a uno con la matriz de permisos de la aplicación. El código es el siguiente:
  @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
                //通过requestCode来识别是否同一个请求
        if (requestCode == 1){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //用户同意执行的操作
                
            }else{
                //用户不同意不同意执行的操作,例如提示用户不同意不给用。。。
            }
        }
    }

Si solicita una sola autoridad arriba, ¿qué pasa si solicita varias autoridades? Los pasos básicos son similares a la solicitud de un solo permiso, pero debido a que se trata de múltiples permisos, se requiere un procesamiento adicional, como la forma de determinar si cada permiso está autorizado. Solicitemos un permiso de grabación más

  • Del mismo modo, primero haga una declaración en AndroidManifest.xml
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
  • La preparación es crear una serie de cadenas de permisos y declarar una lista de permisos, donde la lista se usa para determinar el estado de procesamiento de cada permiso
    String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,
            Manifest.permission.READ_EXTERNAL_STORAGE};
    List<String> mPermissionList = new ArrayList<>();
    
    • Juzgar el estado de autorización de cada autoridad, y agregarlo a la lista de solicitudes sin consentimiento, luego solicitar la autoridad
    private void myRequestPermission() {
        mPermissionList.clear();
        //逐个判断权限是否已经通过
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {            
                //如果未授权,则添加到列表中
                mPermissionList.add(permissions[i]);
            }
        }

        //申请权限,如果列表不为空,说明有权限需要申请
        if (mPermissionList.size() > 0) {
            //有权限没有通过,需要申请
            ActivityCompat.requestPermissions(this, permissionsList.toArray(new String[permissionsList.size()]), 1);
        }else{
            //已有权限,做进一步操作
    }
    }
  • Sobrescriba el método de solicitud de devolución de llamada de permiso para el procesamiento posterior
 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                int resultLength = grantResults.length;
                //说明回调成功了,权限授权被允许
                if(resultLength > 0){
                    for(int grantCode : grantResults){
                        if(grantCode == PackageManager.PERMISSION_GRANTED){
                            Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show();
                        }else{
                            Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
                break;
                default:
                    break;
        }
    }

4. Resumen

Después de comprender los permisos de Android, se puede ver que el proceso de solicitud de permisos no es muy complicado, los permisos ordinarios son relativamente simples, solo deben declararse en AndroidManifest.xml, los permisos peligrosos no solo deben declararse en AndroidManifest.xml, sino que también deben aplicarse dinámicamente en el código , El primero es checkSelfPermission()verificar si un permiso peligroso está autorizado, si no está autorizado, requestPermissions()solicite autorización, recuerde que esto es un procesamiento asincrónico, el código no bloqueará la espera del usuario para autorizar la posición, el siguiente paso es manejar la situación de autorización, la devolución de llamada del sistema onRequestPermissionsResultnos informa que debemos tratar Como resultado, realizamos un procesamiento adicional basado en este resultado. Solicitar múltiples permisos al mismo tiempo es un poco más complicado y necesita manejar el procesamiento de cada permiso.

19 artículos originales publicados · elogiados 6 · visitas 6432

Supongo que te gusta

Origin blog.csdn.net/lansoul1987/article/details/105602076
Recomendado
Clasificación