1

アプリには、デバイスでデフォルトのメディア プレーヤーを起動し、オーディオ ファイル (ポッドキャスト) を再生する 2 つの領域があります。1 つはダウンロード後にファイル システムから取得し、もう 1 つはサイト上のファイルからストリーミングします。

これは現在正常に動作しています。問題は、メディア プレーヤーを起動した後にアプリに戻ろうとして戻るかホームに戻ると、プレーヤーが閉じて再生が停止することです。

アプリに戻ったときに音楽がプレーヤーで再生され続けるように、バックグラウンドまたはサービスとして起動する方法はありますか。音楽プレーヤーから曲を開始したかのように機能させたいです。したがって、ユーザーはデバイスを通常どおり使用でき、再生は続行されます。

ストリーミング用の音楽プレーヤーを起動するコードは次のとおりです。

private void playPodcast( Podcast podcast ) {
    Intent intent = new Intent( Intent.ACTION_VIEW );
    intent.setDataAndType( Uri.parse( podcast.getContentLink() ), "audio/*" );
    startActivity( intent );
}

前もって感謝します。


編集! 以下のアドバイスを受けて、サービスとして立ち上げてみました。私はこれを2つの方法で試しました。
どちらの方法でも、マニフェスト エントリとして次のようになります。

<service android:name=".DefaultMusicPlayerLaunchService">
</service>

最初の試みは、単なるスケルトンである Service クラスを作成し、上記と同様の方法で起動することでした。

DefaultMusicPlayerLaunchService V1:

public class DefaultMusicPlayerLaunchService extends Service {

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

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

playPodcast メソッド:

    private void playPodcast( Podcast podcast ) {
        Intent intent = new Intent( getApplicationContext(), 
                                    DefaultMusicPlayerLaunchService.class );
        intent.setDataAndType( Uri.parse( podcast.getContentLink() ), "audio/*" );
        startService( intent );
    }

私の考えでは、この方法では、以前のアクティビティと同様に音楽プレーヤーを起動しますが、画面を離れることなく起動します。LogCat で何も起きていません。これはうまくいくはずですが、何かが欠けています。

私が試みたもう 1 つの方法は、ポッドキャスト オブジェクトをエキストラとしてシリアルIntent化し、DefaultMusicPlayerLaunchService. 次に、onStartCommandメソッドでオブジェクトを取得し、新しいオブジェクトを作成してから、上部の元のメソッドと同様にIntent呼び出しました。そして予想通り、それは一番上のものと同じことをします...プレーヤーを起動しますが、私が戻ったり家に帰ったりするとすぐに閉じます。startActivityplayPodcast

明らかな何かが欠けている場合はお詫び申し上げます。私は Android を初めて使用し、これまでに使用したものはすべてActivity. これは、を開始する最初の試みServiceです。

4

1 に答える 1

0

はい、サービスとして開始できます。android.app.Service を拡張するクラスを作成する必要があります。そして、Activity から startService(intent) を呼び出して、サービスを開始するインテントを渡します。onStartCommand メソッドをオーバーライドし、明示的に停止するまでサービスを実行する START_STICKY を返すようにします。リソースを節約するために、コードまたは Android OS のいずれかによって。onBind をオーバーライドして、サービスをアクティビティにバインドすることもできます。これにより、フォアグラウンド アクティビティと同じ重要性がサービスに与えられます。これにより、Android がリソースを節約するためにサービスを強制終了する可能性が低くなります。

于 2012-06-14T20:32:04.223 に答える