在我的應用程序中,我已經註冊了一個廣播接收器來接收系統意圖ACTION_DEVICE_STORAGE_LOW。我希望只要手機內存不足,就會播放此內容。所以,我下載了一些額外的應用程序(我的手機有一個非常小的內存),導致操作系統顯示系統內存不足的通知。電話剩餘10-15MB。但是,我的廣播接收機從未收到過這個意圖。然而,系統通知留在通知欄中,並且由於內存較低,我無法瀏覽互聯網。何時廣播ACTION_DEVICE_STORAGE_LOW意圖?
只要顯示低內存通知,是否應該廣播這個意圖?還是有一些甚至更低的內存閾值,會發出這種廣播,我還沒有打到我的手機?在文檔中它只說「廣播動作:一種粘滯的廣播,表明設備上的內存不足」。由於它實際上並沒有定義「低內存條件」,我不知道我是否做錯了什麼,或者如果我還沒有達到那種條件。
這裏是我的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();
}
請在這裏發佈您的代碼 –
我剛剛發佈我的代碼。 DallaRosa的回答非常好,我認爲他的廣播是以剩餘10%的內部存儲空間發送的,但我仍然無法接收廣播。 – mattgmg1990
如果有人感興趣,我找到了接收廣播的問題的答案。事實證明,這個意圖匹配默認的datascheme(意思是不要添加任何數據方案到意圖過濾器)。然後它與沒有問題的操作相匹配。我創建了兩個過濾器來匹配我計劃收到的三個操作,因爲ACTION_MEDIA_MOUNTED需要添加文件datascheme。 – mattgmg1990