2017-11-23 7 views
0

バナー広告をクリックするとうまくいきますが、アプリに戻ってくると強制的にクラッシュして閉じることになります。それはサウンドボードアプリです。バナー広告から戻ってきてアプリがクラッシュする

私はアプリケーションに追加する必要がありますので、アクティビティを終了したりアプリケーションに戻ったりしたときにクラッシュすることはありません。

ちょうど初心者なので、どんな助けもありがとうございます。

Activity1

public class Activity1 extends Activity { 
    int selectedSoundId; 
    MediaPlayer player; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity1); 

     AdView mAdView = (AdView) findViewById(R.id.adMob); 
     AdRequest adRequest = new AdRequest.Builder().build(); 
     mAdView.loadAd(adRequest); 

     setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     player = new MediaPlayer(); 
     final Resources res = getResources(); 

     final int[] buttonIds = { }; 
     final int[] soundIds = { }; 

     View.OnClickListener listener = new View.OnClickListener() { 
      public void onClick(View v) { 
       for (int i = 0; i < buttonIds.length; i++) { 
        if (v.getId() == buttonIds[i]) { 
         selectedSoundId = soundIds[i]; 
         AssetFileDescriptor afd = res 
           .openRawResourceFd(soundIds[i]); 
         player.reset(); 
         try { 
          player.setDataSource(afd.getFileDescriptor(), 
            afd.getStartOffset(), afd.getLength()); 
         } catch (IllegalArgumentException e) { 
          e.printStackTrace(); 
         } catch (IllegalStateException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
         try { 
          player.prepare(); 
         } catch (IllegalStateException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
         player.start(); 
         break; 
        } 
       } 
      } 
     }; 

     for (int i = 0; i < buttonIds.length; i++) { 
      Button soundButton = (Button) findViewById(buttonIds[i]); 
      registerForContextMenu(soundButton); 
      soundButton.setOnClickListener(listener); 
     } 
    } 

    protected void onPause() { 
     super.onPause(); 
     player.stop(); 
     player.release(); 
     player.pause(); 

    } 

} 

Activity1.xml

<RelativeLayout> 
    <com.google.android.gms.ads.AdView 
     xmlns:ads="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/adMob" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     ads:adSize="BANNER" 
     ads:adUnitId="ca-app-pub-3940256099942544/6300978111"/> 
</RelativeLayout> 

クラッシュログ:

致命的な例外:メイン プロセス:com.example.keshav.giantsoundboard、PID:5366 java.lang.RuntimeException:アクティビティを一時停止できません {com.example.keshav.giantsoundboard/com.example.keshav.giantsoundboard.Activity3} android.app.ActivityThread.performPauseActivity(ActivityThread.java:3381)で java.lang.IllegalStateException android.appで android.appで.ActivityThread.performPauseActivity android.app.ActivityThread.-wrap13で(ActivityThread.java:3340) でandroid.app.ActivityThread.handlePauseActivity(ActivityThread.java:3315) (ActivityThread.java) 。 ActivityThread $ H.handleMessage(ActivityThread.java:1362)androiの d.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:148)で android.app.ActivityThread.main(ActivityThread.java:5417)で のjavaで 。 lang.reflect.Method.invoke(ネイティブメソッド) ( )com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit。 java:616) 原因:java.lang.IllegalStateException android.media.MediaPlayer._stop(ネイティブメソッド)の android.media.MediaPlayer.stop(MediaPlayer.java:1231)の com.example.keshav.giantsoundboard.Activity3.onPause(Activity3.java:95) android.app.Instrumentation.callActivityOnPauseでandroid.app.Activity.performPause(Activity.java:6348) で(Instrumentation.javaで:1311) でandroid.app.ActivityThread.performPauseActivity(ActivityThread.java:3367) でandroid.app.ActivityThread.performPauseActivity(ActivityThread.java:3340) android.app.ActivityThread.handlePauseActivity(ActivityThreadました。 java:3315) android.app.ActivityThread.-wrap13(ActivityThread.java ) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1362) at android.os.Handler.dispatchMessage(Handler。java:102) (android.os.Looper.loop(Looper.java:148)) (android.app.ActivityThread.main(ActivityThread.java:5417)) at java.lang.reflect.Method.invoke(ネイティブメソッド) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616で )で

+1

このシナリオで例外メッセージを検査しましたか?私たちが助けることができるように、何らかの種類の衝突診断が必要です。 –

+0

広告をクリックするとアクティビティが一時停止し、アクティビティに戻るときにアクティビティを再開する必要があるため、一時停止エラーが発生しました。しかし、私はその方法を知らない – user7511549

+0

あなたのクラッシュログを提供します。 –

答えて

0

release()の後、MediaPlayerオブジェクトは使用できなくなりました。活動のonPause()メソッド内

あなたはplayerことを発表した後、あなたはMediaPlayerオブジェクトにpause()メソッドを呼び出しています。

のでplayer.release();

+1

のログを参照してください。それはプレーヤーと活動の問題の両方を解決しました。ありがとうございました – user7511549

0

問題が明らかに削除するには、メディアプレーヤでIllegalStateExceptionがを持つクラッシュログを言及。

android.media.MediaPlayer.stopで android.media.MediaPlayer._stop(ネイティブメソッド)でjava.lang.IllegalStateException(MediaPlayer.java:1231

onPause()あなたはカントを書き換え

それはメディアチェックをリリースしながら、プレーヤーを一時停止MediaState diagram below.

protected void onPause() { 
     if (player != null) { 
      //player.stop(); 
      player.release(); 
     } 
     super.onPause(); 
    } 

enter image description here

+0

メディアプレーヤーのために働いていたように、ちょっとおかげで解決策、あなたの1つのちょっと働いたが、主な活動のために戻るボタンを押すとクラッシュした。 – user7511549

関連する問題