2013-02-15 63 views
0

我創建一個基本上包含2 media players的Android應用程序。其他播放來自互聯網(URL)的流的手機存儲器&中的音樂。Android:活動還調用其他服務的應用程序,這不叫

每個媒體播放器都在其單獨的activity中定義。我正在使用Service播放。 (即,當用戶按下播放按鈕時,服務開始播放&播放媒體)。

MusicPlayer是應用程序的默認活動&在包com.example.musicplayer中。而流播放器是在不同的包com.example.streamplayer

問題:應用程序啓動時&我選擇視頻流播放器&按播放鍵,雖然URL流被播放,但我也注意到,其他媒體播放器即音樂播放器的onStartCommand也被調用。

這意味着活動B正在調用服務A,即使它們都位於不同的包中。

音樂播放器活動&服務代碼

package com.example.musicplayer; 

public class MusicPlayerActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     .... 
     Intent service = new Intent(this, MusicService.class); 
     startService(service); 
     .... 
    } 

} 

package com.example.musicplayer; 

public class MusicService extends Service { 

    .... 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     super.onStartCommand(intent, flags, startId); 
     Toast.makeText(this, "Music Service onStartCommand()", Toast.LENGTH_LONG).show();  // This gets displayed even in the Stream Activty 

     return START_STICKY; 
    } 
    .... 

} 

代碼流活動&服務:

package com.example.streamplayer; 

public class StreamPlayer extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     .... 
     Intent service = new Intent(this, StreamService.class); 
     service.putExtra("URL", url); 
     startService(service); 
     .... 
    } 
} 

package com.example.streamplayer; 

public class StreamService extends Service { 

    protected void startStream() { 
     MediaPlayer mPlayer = new MediaPlayer(); 
     mPlayer.reset(); 
     mPlayer.setDataSource(url); 
     mPlayer.prepareAsync(); 
     mPlayer.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mp.start(); 

      } 
     }); 
    } 
} 

的Manifest.xml

注:清單文件,我也嘗試添加以指定哪個服務用於哪個意圖。 (不知道它的工作原理是這樣只)

<service 
    android:name=".MusicService" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name="com.example.musicplayer.MusicPlayerActivity" /> 
    </intent-filter> 
</service> 

<service 
    android:name="com.example.streamplayer.StreamService" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name="com.example.streamplayer.StreamService" /> 
    </intent-filter> 
</service> 

請建議如何確保錯誤的服務應該不會被調用?

前傳這個問題:here

謝謝

回答

0

您的清單隻顯示了一個服務,即使你已經定義了兩個,你把你定義的服務的行動是沒有意義的(它不符合您在代碼中定義的任何操作),並且會被忽略,因爲您發送的兩個Intent都是顯式的。

您的清單中是否定義了兩個服務?

+0

我已經定義了兩個服務...問題已更新。而且,你能告訴我應該採取什麼行動。我對這個元素有點困惑。謝謝 – reiley 2013-02-16 05:21:44

相關問題