В моем приложении я зарегистрировал широковещательный приемник для получения системного намерения ACTION_DEVICE_STORAGE_LOW.Я ожидал, что это будет транслироваться, когда у телефона будет мало внутренней памяти.Итак, я загрузил несколько дополнительных приложений (у моего телефона очень маленькая внутренняя память), что заставило ОС отобразить уведомление о том, что системная память не хватает.На телефоне оставалось 10-15 МБ.Однако мой приемник вещания никогда не получал такого намерения.Тем не менее, системное уведомление остается в панели уведомлений, и я не могу просматривать Интернет из-за нехватки внутренней памяти.
Следует ли передавать это намерение всякий раз, когда отображается уведомление о нехватке внутренней памяти?Или есть какой-то еще более низкий порог памяти, который будет отправлять эту трансляцию, которую я еще не включил в свой телефон?В документации говорится только «Действие широковещательной рассылки: липкая широковещательная рассылка, которая указывает на нехватку памяти на устройстве».Поскольку он фактически не определяет «состояние нехватки памяти», я не знаю, делаю ли я что-то неправильно или просто еще не выполнил это условие.
Вот код для моего 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);
}
}
}
У меня есть служба, которая инициализирует получателя, добавляет фильтр намерений и регистрирует его (среди прочего):
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();
}