2016-10-07 9 views
2

いくつかのアンドロイドデバイスでイヤホンでオーディオファイルを再生しようとしているときに問題が発生しているようです。期待される動作は、イヤホンでオーディオファイルを再生する必要がありますが、Samsung Galaxy Note 2(Androidバージョン4.4.2)やSony Xperia XA(Androidバージョン6.0)などの一部のデバイスでは、スピーカーで再生されます。Android - いくつかのデバイスがイヤホンでオーディオを再生しない

ただし、モトローラモトーg(アンドロイドバージョン6.0)やnexus 5X(アンドロイドバージョン7.0)などのデバイスでは正常に動作します。

アプリにもandroid.permission.MODIFY_AUDIO_SETTINGSの権限があります。

以下でこの問題の詳細を確認してください。

私は次のプロパティを設定し、オーディオ再生する前に:

audioManager = (AudioManager)configService.getContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.setSpeakerphoneOn(isEnabled); 
player = new MediaPlayer(); 
player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 
player.setDataSource(path); 

をどちらか私はMODE_IN_CALLにモードを設定しようとしたが、それは動作しませんでした: audioManager.setMode(android.media.AudioManager.MODE_IN_CALL);

私も他の解決策を試してみました似たような質問をしている投稿はありましたが、あまり役に立たなかったのです。

この問題がデバイス固有であるかどうか、またその問題を解決する方法を知ることは役に立ちます。 助けてくれてありがとう。

答えて

2

最後に解決策が見つかりました。 BroadcastReceiverにインテントACTION_HEADSET_PLUGを登録するとき、それは過去のイベントから保存されたヘッドセットのプラグが差し込まれたイベントのためのスティッキーインテントをブロードキャストしていました。これは、スピーカーだけでオーディオを再生したコールバックを発生させていました。

は、さらに詳細については、以下のスタックオーバーフローのポストを参照してください:link

を私は過去のイベントをフィルタリングするisInitialStickyBroadcast()メソッドを使用し、問題を解決するには。

public void onReceive(Context context, Intent intent) { 
    switch (intent.getIntExtra("state", -1)) { 
     case 0: 
      if (!isInitialStickyBroadcast()) { 
       // headset unplugged 
      } 
      break; 
     case 1: 
      // headset plugged in 
      break; 
     default: 
      break; 
    } 
} 
0

私はACTION_HEADSET_PLUGを使用しますが、いくつかのデバイス6.0 +に受話口から音を再生すると同じ問題を抱えていたしてきました。私の解決策は、LOLLIPOPより高いバージョンのデバイスに​​を使用することです:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     AudioAttributes mAttributes = new AudioAttributes.Builder() 
       .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 
       .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) 
       .build(); 
     mMediaPlayer = MediaPlayer.create(this, R.raw.connection, mAttributes, 1); 
    } else { 
     mMediaPlayer = MediaPlayer.create(this, R.raw.connection); 
    } 
関連する問題