私は音楽プレーヤーアプリケーションを持っていますが、これまではスムーズに動作していました。サービスを作成できません
私はAndroid Focus
についてアンドロイドのドキュメントから学びました。私は学習目的で私のアプリでこれを試してみると思っていました。
アプリ:最小APIレベル:16
;最大:26
;
私は基本的に私のサービスクラスにAudioManager.OnAudioFocusChangeListener
を実装しました。それに
は、私はこのコードが含まれていました。私は自分のアプリケーションでaudiofocus
を実装し、これは私がそれをしなかった方法で試してみました
if(Build.VERSION.SDK_INT<26){
//<26 code
}else {
//26 and above api level
}
:
if(Build.VERSION.SDK_INT>=26){
mAudioFocusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(mAudioAttributes)
.setAcceptsDelayedFocusGain(true)
.setOnAudioFocusChangeListener(this)
.build();
int res = mAudioManager.requestAudioFocus(mAudioFocusRequest);
synchronized(mFocusLock) {
if (res == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
mPlaybackNowAuthorized = false;
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mPlaybackNowAuthorized = true;
playSong();
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
mPlaybackDelayed = true;
mPlaybackNowAuthorized = false;
}
}
} else if(Build.VERSION.SDK_INT<26){
int result = 0;
if (mAudioManager != null) {
result = mAudioManager.requestAudioFocus(this,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);
}
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mPlaybackNowAuthorized = true;
playSong();
}
}
私onAudioFocusChange(int focusChange)
は次のようになります。私は今、私のアプリを実行しようとする問題は、それは私にそれで問題は何サービス
を作成することができません
をこのエラーを与えていますか?私はドキュメントをはっきりと読んだと思う。
何か不足していますか?
更新:
以下のコードを削除すると、それは
else if(Build.VERSION.SDK_INT<26){ int result = 0; if (mAudioManager != null) { result = mAudioManager.requestAudioFocus(this,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN); } if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { mPlaybackNowAuthorized = true; playSong(); }
スタックトレースを動作させるん:
12-18 16:27:47.740 30183-30183/com.example.tilak.imusicplay E/AndroidRuntime: 12-18 16:27:47.740 30183-30183/com.example.tilak.imusicplay E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.tilak.imusicplay, PID: 30183 java.lang.RuntimeException: Unable to create service com.example.tilak.imusicplay.MusicService: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference at android.app.ActivityThread.handleCreateService(ActivityThread.java:2920) at android.app.ActivityThread.access$2000(ActivityThread.java:153) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1458) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:5529) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference at com.example.tilak.imusicplay.MusicService.playSong(MusicService.java:239) at com.example.tilak.imusicplay.MusicService.initMusicPlayer(MusicService.java:115) at com.example.tilak.imusicplay.MusicService.onCreate(MusicService.java:66) at android.app.ActivityThread.handleCreateService(ActivityThread.java:2910) at android.app.ActivityThread.access$2000(ActivityThread.java:153) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1458) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:5529) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 12-18 16:27:47.742 30183-30183/com.example.tilak.imusicplay E/MQSEventManagerDelegate: failed to get MQSService.
:それは私が強く用の質問と回答を読むことをお勧めし...このエラー
をを修正します私たちに教えてください。私たちは魔法のように問題を推測できる魔術師ではありません –
私は、私が見たことの一つは、 'else if(Build.VERSION.SDK_INT <26){ int result = 0; if(mAudioManager!= null){ 結果= mAudioManager.requestAudioFocus(this、AudioManager.STREAM_MUSIC、AudioManager.AUDIOFOCUS_GAIN); (結果== AudioManager.AUDIOFOCUS_REQUEST_GRANTED){ mPlaybackNowAuthorized = true; playSong(); } 'この部分は動作します。 –
あなたは何を言っているのか分かりません。あなたはいくつかのコードを持っていて、うまく動作していないかもしれません。おそらくエラーがあり、何の手掛かりもありません。あなたはあなたの問題が –