2011-08-08 7 views
2

タイトルと同じです。 ブロードキャストを開始するにはsendBroadcast(intent)を使用します。 その後、broadcast.javaそうのように、onReceive()を使用するには:アンドロイドはBroadcastReceiverを使用してサービスなしで音楽を再生できますか?

public void onReceive(Context context, Intent intent) 
{  
     Toast.makeText(context, "successful", Toast.LENGTH_LONG).show(); 
     MediaPlayer.create(context, R.raw.canon).start();  
    } 

しかし、VMがそれを行うことはできません、それは言う:the media unable to create.... 私は初心者だけど、私はそれに対処する方法がわかりません。 お願いします。ありがとうございます:-)

答えて

3

いいえ、onReceiveで非同期または長期実行を開始することはできません。バックグラウンドで何かを実行する必要がある場合は、Serviceを使用してください。

これは、onReceiveが返されるとすぐに、コンポーネントが死んだとみなされるからです。したがって、バックグラウンド操作はこのコンポーネントに関連付けることはできません。さらに、Androidが処理中の唯一のコンポーネントだった場合は、onReceiveが返ってくるとすぐにAndroidがプロセスを終了させる可能性があります。

+0

ありがとうo(∩_∩)o ...あなたの答えは私に理由を明確に知らせてくれます。もう一度お気持ち!!! – qzeroy

0

はい、できます。

ただし、これはメディア再生が計算集約的な作業になる可能性があるため、悪い習慣です。

アプリケーションのメインスレッドでメディアを取得して再生しようとすると、Androidの恐れられた「ブルースクリーン」、アプリケーションが応答しない、正常終了のエラーが発生する可能性が非常に高くなります。

EDIT:

重要な注意:

は一般的に、あなたは直接音楽のように大きなファイルにアクセスしようとするのではなく、のContentProviderを使用します。

+0

あなたの答えをありがとう、それは多くの助けになります。私は自分自身を改善するために多くのことを学ぶべきだと思っています。 – qzeroy

+0

問題ありません。あなたの質問に答えた場合、答えを「正しい」とマークしてください。あなたが楽しんでいるといいなあと思っています! – Codeman

関連する問題