2012-01-15 3 views
0

Так что я пытаюсь создать это действие, которое отображает кнопку изображения. Фон для кнопки изображения указывает на xml в выпадающей папке, чтобы отображать разные снимки для фокусировки и щелчка. Все работает отлично. У меня есть музыка в моей основной деятельности, которая настроена на цикл. По умолчанию для кнопки изображения установлено значение «Вкл. Музыку». Я хочу, чтобы это произошло, когда нажата кнопка, основной звук будет приостановлен, а фон кнопки изменится на другой xml-чертеж, который говорит Music Off. Когда он снова будет нажат, музыка возобновится там, где она остановилась, и снова переключитесь на Music On.Media Player и If Statementments

Одна из проблем, с которыми я столкнулась, приостанавливает основной звук. Поскольку я новичок в андроиде, переменная медиаплеера, которую я использую в своем основном действии, должна быть изменена в другом действии? Кроме того, в моих настройках параметров у меня есть два оператора if под кнопкой click для кнопки изображения, чтобы проверить, воспроизводится ли звук или нет, и затем будет либо приостанавливать, либо возобновлять музыку в зависимости от того, какой она есть. Я не уверен, как сделать второе утверждение if, но у меня есть первый, который, я думаю, может быть прав.

Извините, что есть много разных вещей, которые я пытаюсь сделать, но я попытался сломать их. Кроме того, я набираю силу с тех пор, когда я начинаю optionsActivity, и я буду помещать все ниже, включая основное действие, потому что именно там я устанавливаю mainSound. Спасибо за любую помощь, которую вы можете мне дать.

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(); 
      } 
      } 
      }); 








} 
} 

LogCat:

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

Я также разработал музыкальный плеер в Android

Одна проблема, которую я имею во время паузы главный звук. Так как я новичок в андроид может переменная медиаплеера, с которой я ссылаюсь в своей основной деятельности, будет изменена в другом действии?

Я мог бы сказать, что это да, если вы объявите его как статический объект

Кроме того, в моей деятельности варианты у меня есть два, если заявления в рамках на нажмите на кнопку изображение, чтобы проверить воспроизводится ли звук или нет, а затем будет приостановлено или возобновлено воспроизведение музыки в зависимости от , какой он есть. Я не уверен, как сделать второй оператор if, но у меня есть первый, который, я думаю, может быть прав.

Я думаю, вы должны смотреть на жизненный цикл Android Media Player, вы можете повторно использовать свой объект, но есть некоторые условия: http://developer.android.com/reference/android/media/MediaPlayer.html

+0

Спасибо, я посмотрю. –

+0

@ Zach J. Удачи – arufian

0

Так как я новичок в андроид может переменной медиапроигрыватель я ссылаться на мой основной изменение активности в другой деятельности?

No. Если вы создаете MediaPlayer в действии, его следует использовать только тогда, когда это действие находится на переднем плане. Ваш MediaPlayer, скорее всего, должен управляться Service, если вы планируете продолжить игру, как только пользователь оставит эту активность.

+0

Хорошо, вот что я хочу сделать. Проведите петлю в фоновом режиме, пока мне не понадобится, чтобы сделать паузу. Поэтому для этого я бы воспользовался Сервисом? –

+0

@ ZachJ .: Да, услуга, похоже, будет уместна здесь. – CommonsWare

+0

Не могли бы вы предоставить ссылку или указать мне в правильном направлении. Я не уверен, как пользоваться сервисом. Спасибо –