2012-01-15 5 views
0

그래서 내가 만들고자하는 것은 이미지 버튼을 표시하는 활동입니다. 이미지 버튼의 배경은 포커스가있는 다른 그림을 표시하고 클릭 할 수있는 드로어 블 폴더의 xml을 가리 킵니다. 그건 모두 잘 작동합니다. 루프로 설정되는 주요 활동에 음악이 있습니다. 기본적으로 이미지 버튼은 Music On으로 설정됩니다. 버튼을 클릭하면 주 사운드가 일시 중지되고 버튼 배경이 음악 끄기라고 표시된 다른 XML 드로어 블 레이아웃으로 변경됩니다. 음악을 다시 클릭하면 음악이 다시 시작되고 음악을 다시 시작합니다.Media Player 및 If 문

주된 소리를 일시 중지하는 데 문제가 있습니다. 내가 안드로이드를 처음 접했을 때 내 주요 활동에서 언급 한 미디어 플레이어 변수가 다른 활동에서 변경 될 수 있습니까? 또한, 내 옵션 활동에서 소리가 재생 중인지 아닌지를 확인하기 위해 이미지 단추에 대한 클릭 아래에 두 개의 if 문이 있으며 그 중 하나에 따라 음악을 일시 중지하거나 다시 시작합니다. 두 번째 if 문을 수행하는 방법을 잘 모르겠지만 첫 번째 문이 맞다고 생각합니다.

미안하지만 할 일이 많지만 미안하지만 말입니다. 또한, 옵션 액티비티를 시작할 때 현재 강제 종료됩니다. 메인 액티비티를 설정하기 때문에 기본 액티비티를 포함하여 모든 것을 아래에 배치합니다. 당신이 내게 줄 수있는 도움을 주셔서 감사합니다.

MainActivity :

package com.crazycastles; 


import android.app.Activity; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.ImageButton; 



public class MainActivity extends Activity implements OnClickListener { 
    /** Called when the activity is first created. */ 
    private MediaPlayer mainSound; 


    @Override 


    public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { //Back key pressed //Things to Do 
     if(mainSound!= null) { mainSound.pause(); mainSound=null; } finish(); return true; } return super.onKeyDown(keyCode, event); } 



    public void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mainSound = MediaPlayer.create(MainActivity.this, R.raw.mainscreen); 
     mainSound.setLooping(true); 
     mainSound.start(); 



     //CREATE BUTTON 1 & SOUND 
     final MediaPlayer buttonSound = MediaPlayer.create(
       MainActivity.this, R.raw.swords); 

     ImageButton button1 = (ImageButton) findViewById(R.id.button1); 
     button1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       buttonSound.start(); 
       startActivity(new Intent(MainActivity.this, 
         button1Activity.class)); 
      } 
     }); 

     ImageButton multiplayerbutton = (ImageButton) findViewById(R.id.multiplayerbutton); 
     multiplayerbutton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       buttonSound.start(); 
       startActivity(new Intent(MainActivity.this, 
         multiplayerbuttonActivity.class)); 
      } 
     }); 

     ImageButton optionsbutton = (ImageButton) findViewById(R.id.optionsbutton); 
     optionsbutton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       buttonSound.start(); 
       startActivity(new Intent(MainActivity.this, 
         optionsActivity.class)); 
      } 
     }); 

     ImageButton creditbutton = (ImageButton) findViewById(R.id.creditbutton); 
     creditbutton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       buttonSound.start(); 
       startActivity(new Intent(MainActivity.this, 
         creditsActivity.class)); 
      } 
     }); 
     ImageButton exitbutton = (ImageButton) findViewById(R.id.exitbutton); 
     exitbutton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       buttonSound.start(); 
       finish(); 
       mainSound.stop(); 
       System.exit(0); 

      } 
     }); 



     //END OF BUTTON1 & SOUND 



     } 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

    } 

} 

optionsActivity :

package com.crazycastles; 

import android.app.Activity; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.ImageButton; 

public class optionsActivity extends Activity { 
    /** Called when the activity is first created. */ 
    ImageButton musicbutton, musicbutton2; 
    private MediaPlayer mainSound; 
    final MediaPlayer buttonSound = MediaPlayer.create(
      optionsActivity.this, R.raw.swords); 


    @Override 

     public void onCreate(Bundle savedInstanceState) { 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.options); 



      final ImageButton musicbutton = (ImageButton) findViewById(R.id.musicbutton); 
      musicbutton.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 

      if(mainSound.isPlaying()) { 
       musicbutton.setBackgroundResource(R.drawable.musicbutton2); 
       buttonSound.start(); 
       mainSound.pause(); 
      } 
      } 
      }); 








} 
} 

로그 캣 :

01-15 16:10:55.059: E/AndroidRuntime(7319): FATAL EXCEPTION: main 
01-15 16:10:55.059: E/AndroidRuntime(7319): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.crazycastles/com.crazycastles.optionsActivity}: java.lang.NullPointerException 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.app.ActivityThread.access$2500(ActivityThread.java:129) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.os.Looper.loop(Looper.java:143) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.app.ActivityThread.main(ActivityThread.java:4701) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at java.lang.reflect.Method.invoke(Method.java:521) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at dalvik.system.NativeStart.main(Native Method) 
01-15 16:10:55.059: E/AndroidRuntime(7319): Caused by: java.lang.NullPointerException 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.content.ContextWrapper.getResources(ContextWrapper.java:80) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.media.MediaPlayer.create(MediaPlayer.java:641) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at com.crazycastles.optionsActivity.<init>(optionsActivity.java:17) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at java.lang.Class.newInstanceImpl(Native Method) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at java.lang.Class.newInstance(Class.java:1429) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
01-15 16:10:55.059: E/AndroidRuntime(7319):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2651) 

답변

0

은 또한 안드로이드

하나의 문제 내가 메인 사운드를 일시 중지되는 데에 음악 플레이어를 개발했다. 나는 에 안드로이드를 처음 접했을 때 미디어 플레이어 변수를 참조 할 수있게되었습니다. 내 주요 활동은 다른 활동으로 변경 되었습니까?

나는 그것을 말할 수 당신이

또한 정적 객체로 선언하는 경우 예, 내 옵션 활동에 나는이 두 이미지 버튼의에 클릭 아래 문을 확인하는 경우 사운드가 재생 중인지 또는 인지 여부는 에 따라 음악을 일시 중지하거나 다시 시작합니다. 나는 두 번째 if 문을 수행하는 방법을 잘 모르지만 나는 첫 번째 문장을 가지고 있다고 생각합니다.

난 당신이 안드로이드 미디어 플레이어의 라이프 사이클을보고 있다고 생각하면 개체를 다시 사용할 수 있지만 몇 가지 조건이있다 : http://developer.android.com/reference/android/media/MediaPlayer.html

+0

고마워, 내가 살펴 보겠다. –

+0

@Zach J. 행운을 빌어 요. – arufian

0

나는 안드로이드에 새로 온 이후 수 내 주에서 참조 미디어 플레이어 변수 활동이 다른 활동에서 변경 되었습니까?

아니요. 활동에 MediaPlayer을 만들면 해당 활동이 포 그라운드에있는 동안에 만 사용해야합니다. MediaPlayer은 사용자가 활동을 떠난 후에도 계속 재생할 계획이면 Service으로 관리해야합니다.

+0

가 좋아, 내가하고 싶은 것을 이잖아. 잠시 멈출 필요가있을 때까지 배경으로 반복하십시오. 그래서 이것을 위해 나는 서비스를 사용할 것인가? –

+0

@ZachJ : 예, 서비스가 여기에 적합 할 것 같습니다. – CommonsWare

+0

링크를 제공하거나 올바른 방향으로 나를 가리킬 수 있습니까? 서비스 사용 방법을 잘 모르겠습니다. 감사합니다 –