2012-09-05 81 views
0

停止的意圖我有一個Intent時啓動的MusicService它連接到互聯網和播放流:啓動的服務

final Intent i = new Intent(MusicService.ACTION_URL); 
Uri uri = Uri.parse("http://31.3.242.244:8058"); 

i.setData(uri); 
startService(i); 

progressDialog = ProgressDialog.show(fmActivity.this, "", "connecting..."); 
progressDialog.setCancelable(true); 

當連接建立我有一個Handler關閉對話框:

static Handler closeHandler = new Handler() { 
    public void handleMessage(Message msg) { 
     if (progressDialog !=null) { 
      progressDialog.dismiss(); 
     } 
    } 
};  
fmActivity.closeHandler.handleMessage(null); //from the MusicService 

這一切都很好,除非連接掛起或服務器連接速度很慢。我需要能夠取消Intent嘗試用後退按鈕啓動MusicService。檢查互聯網連接將無濟於事,因爲始終存在連接...用戶需要能夠取消連接的呼叫,因爲如果連接到服務器的連接由於某種原因而失敗,則會阻止用戶加載不同的流。我已經搜遍了,無法找到如何做到這一點。謝謝。

+0

如果有一個不好的連接,爲什麼沒有你的應用只停留於那個特定的流音樂服務?它似乎不適合掛在那裏,並讓用戶決定是否連接不好。一旦意圖開始,它就開始了。但是,您可以停止服務。 –

+0

在請求/連接完成後,您可以處理套接字異常..這可以簡化取消操作 – Chet

+0

「如果連接不好,爲什麼您的應用程序不會停止該特定流的音樂服務?」是的,這將與用戶取消它相同,但這是我不知道如何進行... –

回答

0

您可以在取消OnClickListener內解除ProgressDialog之前停止音樂服務。

例如:

progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       stopService(i); // Stop the music service here 
       dialog.dismiss(); 
      } 
}); 
+0

謝謝,但這並不能阻止MusicService,它只是關閉對話框。 –

+0

對不起。我忘了添加最重要的行!我編輯了我的答案。檢查新版本,看看是否可以幫助你。 –

+0

哇,你是一個天才!我無法相信這是多麼簡單,我花了多少時間在這上面花了。有關於無法在媒體播放器處於準備狀態時停止MediaPlayer的帖子,比如下面這些:[link](http://stackoverflow.com/questions/4971914/safe-to-reset-a-mediaplayer在準備狀態)和這個:[鏈接](http://stackoverflow.com/questions/4180670/android-mediaplayer-is-preparing-too-long)感謝您的幫助。 –