15

私はAndroidを初めて使用します。アプリケーションを閉じても曲を再生し続けることができるように、MediaPlayerのサービスを作成しています。Media Playerのアクティビティを作成しました。これには、再生、一時停止、次、前、シークバーなどのすべての機能があり、oncompletionlistenerも含まれています。すべてがうまく機能します。しかし今、私はすべてがサービスによって管理されるべきであることを望みます。

MyServiceクラスを作成しました:

public class MyService extends Service {

    public static MediaPlayer mp;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        mp = new MediaPlayer();     
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {  
        return START_STICKY;
    }

しかし、私のプレーヤーアクティビティでは、currentsongIndexを取得するSonglistのArrayListを作成し、それを通じて、next、previous、allなどのすべての機能を維持しています。 ?MediaPlayerオブジェクトは、サービスまたはアクティビティのどこで意味を作成する必要がありますか?

MediaPlayerについては、http: //www.androidhive.info/2012/03/android-building-audio-player-tutorial/を参照しました。私のメディアプレーヤーコードについては、このサイトを参照できます。ありがとう。Pleazeは私の疑問を解消します。私はとても混乱しています。すぐに返信してください。

4

3 に答える 3

8

あなたは正しい方向に進んでいます。SDKサンプルから適応しました。これは私がそれを行う方法であり、それは素晴らしい働きをします。ArrayListから(サービスからではなくアクティビティで)呼び出し

onListItemClick

そして、音楽サービスを開始するインテントを開始します。

startService(new Intent(MusicService.ACTION_PLAY));

マニフェストに以下を追加する必要があります。

 <intent-filter>
            <action android:name="com.blah.blah.action.PLAY" />
           <xxx xxx> 
 </intent-filter>

そしてもちろん、音楽サービスでは、インテントを受け取る必要があります。

public int onStartCommand(Intent intent, int flags, int startId) {
    String action = intent.getAction();
    if (action.equals(ACTION_PLAY))
        processPlayRequest();
  }

スキップ、巻き戻し、停止などのインテントを必ず追加してください。これが役立つかどうか教えてください。

于 2013-01-05T05:58:26.213 に答える
2

アプリをバックグラウンドで実行するためには、「サービス」自体が処理する必要があります。
この例に従ってみてくださいhttp://www.vogella.com/articles/AndroidServices/article.html
サービスはバックグラウンドで動作するように設計されています。

于 2013-01-04T05:58:44.640 に答える
0

私はまったく同じことを経験しました!本当に素晴らしいmp3プレーヤーアプリでさえ開発するのは長い道のりです。答えは長いです。

これが私を本当に助けてくれたいくつかのリソースです。Androidの開発者向けドキュメントには、まさにこのことに関する記事があります。

http://developer.android.com/guide/components/services.html

バインドされたサービスとフォアグラウンドでの実行に関するこの長い記事の下部にある内容に注意してください。

さらに、プレーヤーの状態を管理することが、私にとって最も頭痛の種でした。

新しいサービスを生成してもメインUIスレッドですべてが実行されるため、スレッド化についても確認する必要があります。これはおかしなことに聞こえますが、真実です。スレッドプールを管理するためのExecutorServiceを見てください。簡単だったと言えたらいいのにと思います。

残念ながら、ウェブ全体からの正式なトレーニングのほとんどは、Androidサービスを使用して、有料サイトから提供されています。

http://www.pluralsight.com/training/Courses/TableOfContents/android-services

これは、私が思うすべてのプログラマーにとって良いリソースですが、他のチュートリアルサイトで簡単に説明されているAndroidプログラミングの多くの側面に関するすばらしいセクションがあります。

上記のように、Vogellaのリソースも優れています。

于 2013-12-28T17:27:53.163 に答える