SetPackage para la intención en pan de jengibre
De acuerdo con la documentación de Android :
Alternativamente, a partir de ICE_CREAM_SANDWICH, también puede restringir con seguridad la transmisión a una sola aplicación con Intent.setPackage
- LocalBroadcastManager vs Context.registerReceiver (), Context.sendBroadcast (Intent) y Context.unregisterReceiver () son iguales?
- BroadcastReceiver en android.net.conn.CONNECTIVITY_CHANGE llamado varias veces
- API de geocodificación de Android BroadcastReceiver no activado
- ¿Emisión si un dispositivo bluetooth está conectando / desconectando?
- Cómo crear una intención pendiente dentro de una clase BroadcastReceiver?
¿Hay alguna manera en Gingerbread (utilizando la biblioteca de compatibilidad quizás) para restringir un evento sendBroadcat () de tal manera que sólo lo envía a un paquete especificado?
- El receptor de la difusión para comprobar la conexión a internet se llama dos veces cuando desconecto el wifi
- Android <receptor> - BroadcastReceiver no se llama
- ¿Es posible escribir un receptor de difusión Android que detecte cuando el teléfono se despierta?
- La notificación deleteIntent no funciona
- ¿Cómo identifica * qué * dispositivo bluetooth causa una emisión ACTION_ACL_CONNECTED?
- GpsStatus.Listener sólo funciona si el GPS está activado
- Por qué algunos receptores de radiodifusión sólo pueden registrarse a través de Code o AndroidManifest
- RTC_WAKEUP no funciona
Mi primera sugerencia sería usar LocalBroadcastManager si es posible. Esto le permite ignorar completamente cualquier problema de seguridad.
Si realmente necesitas enviar la transmisión de una aplicación a otra, es verdad que registerReceiver () no respetó la restricción setPackage hasta ICS, así que no puedes confiar en ella hasta entonces. No hay ningún truco secreto para hacer lo que quieres, es sólo que la plataforma no tiene la facilidad para ello.
Dicho esto … si está a punto de especificar un nombre de paquete explícito, ¿por qué no ir todo el camino y utilizar Intent.setComponent () ?
También tenga en cuenta que incluso setPackage () o setComponent () no son completamente seguros automáticamente – todavía está haciendo una suposición de que sabe quién está implementando ese nombre de paquete, y es totalmente posible para una aplicación diferente de lo que espera Se instalará a través de carga lateral, incluso si es propietario del nombre en Play Store.
Los documentos dicen que setPackage
fue introducido en el nivel 4 de API, pero tal vez hubo un cambio de marco que lo hace funcionar diferente / mejor en ICS. ¿Qué pasa con la creación de su propio filtro de intención que sus receptores reconocerán? El ejemplo de NotePad cerca de la parte inferior de esta página muestra un ejemplo: en el manifiesto, el ejemplo de NoteEditor especifica
<action android:name="com.android.notepad.action.EDIT_NOTE" />
Que es una acción personalizada definida por la aplicación.
Como las emisiones son manejadas por el sistema, no puedo imaginar que hay alguna forma de código en una solución sin tocar el código del sistema (por lo que el paquete de compatibilidad no ayudará).
Si realmente está interesado en mantener una transmisión segura, puede seguir la sugerencia de Android Docs para pre-Android 4.0 mediante permisos:
Para imponer un permiso al enviar, proporciona un argumento de permiso no nulo a
sendBroadcast(Intent, String)
osendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle)
. Sólo los receptores a los que se haya concedido este permiso (al solicitarlo con la etiqueta en su AndroidManifest.xml) podrán recibir la transmisión.
- Vinculación de Opencv a mi propio proyecto android
- ¿Cómo puedo restringir mi aplicación de Android a no-Tablets?