2014-09-01 27 views
1

enter image description here關閉內存不足的通知?

正如您從圖片中看到的,當系統內存不足時,這是我的奇特媒體播放器通知的情況。此通知由服務發出,當系統內存不足時,系統也會自動停止該服務。

從行爲看來,ServiceonDestroy()似乎沒有被調用,因爲它被實現來擺脫通知。所以,我決定實施onTrimMemory()如下:

@Override 
public void onTrimMemory(int memory){ 
    Log.d("TRIM", "Please, Trim Memory"); 
    String stop = getResources().getString(R.string.stopping_playback); 
    if(MusicService.status == 1){ 
     stopService(PodcastrApplication.newInstance().getMusicServiceIntent()); 
    } 
    Toast.makeText(PodcastrApplication.this, stop, Toast.LENGTH_SHORT).show(); 
} 

但是這並沒有奏效。我甚至沒有看到Toast或Log。

那麼,如何在系統內存不足時刪除通知?

PS:在發生這種情況時,確定MediaPlayer已停止播放(自動)。這只是一個刪除通知的問題。

回答

1

當服務終止時,它會通知其所有客戶端此事件。因此,客戶端活動中相應的ServiceConnection對象會收到onServiceDisconnected()回調。您可以從此方法中刪除通知。

編輯:

private ServiceConnection connection = new ServiceConnection(){ 

     public void onServiceDisconnected(ComponentName name){ 

      ClientActivity.this.runOnUiThread(new Runnable({ 

       public void run(){ 
        getSystemService("notification").cancelAll(); 
       } 
      })); 
     } 

     public void onServiceConnected(...){...}//do something if you need to 
}; 
public void onPause(){   

    Intent i = getIntentForService(); 
    bindService(i, connection, Context.BIND_AUTO_CREATE); 
} 
public void onStop(){//or onDestroy() 
    unBindService(connection); 
} 
+0

好和哪裏去這樣?在「MainActivity」中?我需要一個「IBinder」或類似的東西嗎?這對我來說是新的:) – 2014-09-01 14:32:11

+0

我以爲,因爲你使用的是服務,這個概念對你來說很熟悉。 – 2014-09-01 14:33:18

+0

好的,閱讀你的編輯。即使應用程序不專注,這也可以工作嗎?當用戶按下'HOME'按鈕時,會顯示notif :) * Like Google Play音樂* – 2014-09-01 14:47:14