Aplicación de los permisos de Android en la misma aplicación

Aquí hay un escenario. Mi aplicación tiene

  • BroadcastSenderActivity
  • SampleBroadcastReceiver

Estoy usando el sendBroadcast(intent, permission) para enviar mi difusión porque me gustaría que mi SampleBroadcastReceiver reciba el mensaje de difusión y evite que otros receptores de mi aplicación reciban el mensaje.

Nota: Todos los receptores están registrados para la misma acción, pero al momento de la difusión basándose en las condiciones del sistema, el mensaje se emitirá con diferentes permisos.

De la documentación aprendí que necesito lo siguiente en el manifiesto:

  1. Necesito declarar <permission android:name="com.example.MYPERMISSION" android:label="my_permission" android:protectionLevel="normal"></permission> en el manifiesto

  2. Tenga este stmt para solicitar el permiso que está en el nivel de la aplicación <uses-permission android:name="com.example.MYPERMISSION"/>

PREGUNTA :

  • En lugar de solicitud de permiso de nivel de aplicación, ¿cómo puedo solicitar permiso sólo para un componente en particular en mi aplicación? p.ej. SampleBroadcastReceiver (ver código abajo). ¿Es posible?*

  • ¿Cuál es el propósito de la etiqueta <android-permission> que está disponible para todos los componentes inidividual? ¿Puede servir a mi propósito?

    AndroidManifest

      ......... 

     <activity android:name="com.example.activities.BroadcastSenderActivity" android:label="BroadcastSenderActivity" android:theme="@android:style/Theme.Light" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- ************************************** RECEIVER ******************************************* --> <receiver android:name="com.example.broadcastTest.SampleBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="com.example.ACTION_BROADCAST_SEND" /> </intent-filter> </receiver> <receiver android:name="com.example.broadcastTest.BroadcastReceiver_1" android:exported="false"> <intent-filter> <action android:name="com.example.ACTION_BROADCAST_SEND" /> </intent-filter> </receiver> <receiver android:name="com.example.broadcastTest.BroadcastReceiver_2" android:exported="false"> <intent-filter> <action android:name="com.example.ACTION_BROADCAST_SEND" /> </intent-filter> </receiver> 

  public class BroadcastSenderActivity extends Activity { public BroadcastSenderActivity() { } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(Logger.TAG, "BroadcastSenderActivity - onCreate"); setContentView(R.layout.broadcast_tester); Button btn = (Button)findViewById(R.id.sendBroadcastBtn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent broadcastIntent = new Intent(); Log.d(Logger.TAG, "BroadcastSenderActivity - sending the broadcast"); broadcastIntent.setAction(com.example.ACTION_BROADCAST_SEND); BroadcastSenderActivity.this.sendBroadcast(broadcastIntent, com.example.MYPERMISSION); 

Puede proteger cada componente independiente con un permiso específico. Este es el atributo android:permission="..." que se puede aplicar a cada componente por separado. Esto le permite requerir diferentes permisos, por ejemplo, para iniciar una Activity específica, iniciar un Service específico o utilizar un BroadcastReceiver específico. Este atributo indica que la aplicación debe contener el permiso especificado para poder utilizar el componente específico.

Una aplicación contiene un conjunto de permisos. Estos permisos se solicitan en el manifiesto mediante las etiquetas <uses-permission> . Al usuario se le muestra esta lista cuando se instala la aplicación y se concede a la aplicación estos permisos durante la instalación .

Cuando envía una transmisión, por lo general todos los BroadcastReceiver instalados y / o registrados pueden ver esta transmisión. Cuando se utiliza el método sendBroadcast(intent, permission) el parámetro de permission se utiliza para controlar qué receptores pueden ver la emisión. Sin embargo, esta comprobación de permisos también se realiza en el nivel de aplicación . Esto significa que si una aplicación se ha concedido el permiso especificado, entonces todos los BroadcastReceiver de esa aplicación podrán ver la emisión.

Por lo tanto, lo que desea hacer no es posible utilizando el mecanismo de permisos de Android. Dado que una aplicación tiene o no un permiso específico, no puede tener un control detallado sobre qué componentes pueden ser utilizados por una aplicación específica.

Esperemos que esto responda a su pregunta.

EDIT: Sugerencia alternativa:

Dado que esto es todo dentro de una sola aplicación, debería ser capaz de administrar esto usted mismo. Personalmente, creo que usar el marco de permisos de Android para esto es un exceso. Sólo puede añadir un extra adecuado a la Intent difusión y utilizarlo para controlar el acceso a los receptores. O bien, puede definir 2 acciones de Intent diferentes y utilizarlas para controlar el acceso.

  • Android - Extraer texto de SMS
  • Extensión Dashclock Widget sin actualizar
  • Clear Aplicaciones recientes limpiar la memoria de aplicaciones y mi receptor dejó de funcionar
  • Prueba "real" del receptor de sms
  • Cómo agregar Snackbars en un BroadcastReceiver?
  • Servicio y un BroadCastReceiver
  • Android Broadcast Receiver para enviar mensajes SMS?
  • El receptor de difusión de Android no recibe ACTION_SCREEN_ON
  • BroadcastReceiver para SMS de varias partes
  • ¿Cómo crear una aplicación Android con sólo 1 broadcastreceiver?
  • Registro / cancelación de registro dinámico de un receptor de difusión en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.