2017-12-17 7 views
-1

私は音楽プレーヤーアプリケーションを持っていますが、これまではスムーズに動作していました。サービスを作成できません

私は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. 

Whole Class Code

+0

:それは私が強く用の質問と回答を読むことをお勧めし...このエラー

を修正します私たちに教えてください。私たちは魔法のように問題を推測できる魔術師ではありません –

+0

私は、私が見たことの一つは、 '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(); } 'この部分は動作します。 –

+0

あなたは何を言っているのか分かりません。あなたはいくつかのコードを持っていて、うまく動作していないかもしれません。おそらくエラーがあり、何の手掛かりもありません。あなたはあなたの問題が –

答えて

1

あなたのエラーメッセージを見てください!これはNullPointerExceptionです。リストはヌルオブジェクトです!

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 
1

にあなたのコードをチェックし、問題がアプリケーションがsongsを初期化しないということです。 (確かにsetSongsメソッドがありますが、呼び出さないでください)

ソリューション:songsを適切な場所に初期化するコードを追加してください。 ?あなたを想定している - *それで問題が何*

関連する問題