En mi aplicación, he registrado un receptor de difusión para recibir el intento del sistema ACTION_DEVICE_STORAGE_LOW. Esperaba que se emitiera cuando el teléfono tenía poca memoria interna. Entonces, descargué algunas aplicaciones adicionales (mi teléfono tiene una memoria interna muy pequeña) lo que hizo que el sistema operativo mostrara la notificación de que la memoria del sistema es baja. El teléfono tenía 10 - 15 MB restantes. Sin embargo, mi receptor de emisión nunca recibió esa intención. Sin embargo, la notificación del sistema permanece en la barra de notificaciones y no puedo navegar por Internet debido a la poca memoria interna.¿Cuándo se transmite la intención ACTION_DEVICE_STORAGE_LOW?
¿Debería emitirse este intento siempre que se muestre la notificación de memoria interna baja? ¿O hay algún umbral de memoria aún más bajo que envíe esta transmisión que todavía no he alcanzado en mi teléfono? En la documentación, solo dice "Acción de difusión: una emisión fija que indica una condición de memoria baja en el dispositivo". Dado que en realidad no define "condiciones de baja memoria", no sé si estoy haciendo algo mal o si simplemente aún no he alcanzado esa condición.
Este es el código para mi BroadcastReceiver:
public class MemoryBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
Log.isExternalStorageProblem = false;
Log.clearNotification(Log.externalMemoryNotificationID);
}
if (action.equals(Intent.ACTION_DEVICE_STORAGE_OK)) {
Log.isInternalStorageLow = false;
Log.clearNotification(Log.internalMemoryNotificationID);
}
if (action.equals(Intent.ACTION_DEVICE_STORAGE_LOW)) {
Log.isInternalStorageLow = true;
Log.displayMemoryNotification("Internal Storage Low",
"The internal storage is low, Please fix this.",
"Please clear cache and/or uninstall apps.", Log.internalMemoryNotificationID);
}
}
}
Tengo un servicio que inicializa el receptor, añade el filtro de la intención y la registra (entre otras cosas):
private MemoryBroadcastReceiver memoryBroadcastReciever = new MemoryBroadcastReceiver();
public void registerBroadcastReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_DEVICE_STORAGE_OK);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_DEVICE_STORAGE_LOW);
filter.addDataScheme("file");
this.getApplicationContext().registerReceiver(memoryBroadcastReciever, filter);
}
@Override
public void onCreate() {
registerBroadcastReceiver();
}
por favor publique su código aquí –
Acabo de publicar mi código. La respuesta de DallaRosa es genial y creo que tiene razón sobre la transmisión que se envía al 10% de almacenamiento interno restante, pero aún no he podido recibir la transmisión. – mattgmg1990
En caso de que alguien esté interesado, encontré la respuesta a mi problema al recibir la transmisión. Resulta que esta intención coincide con el esquema de datos predeterminado (es decir, no agrega ningún esquema de datos al filtro de intención). Luego coincide con la acción sin ningún problema. Creé dos filtros para que coincidan con las tres acciones que estaba planeando recibir porque ACTION_MEDIA_MOUNTED necesita agregar el datascheme del archivo. – mattgmg1990