Медиаплеер и заявления If - PullRequest
0 голосов
/ 16 января 2012

Итак, я пытаюсь создать действие, которое отображает кнопку с изображением. Фон для кнопки изображения указывает на XML-файл в папке для рисования, чтобы показать различные изображения для фокусировки, и щелкните. Это все работает отлично. У меня есть музыка в моей основной деятельности, которая настроена на петлю. По умолчанию кнопка изображения настроена на включение музыки. Я хочу, чтобы при нажатии кнопки основной звук приостанавливался, а фон кнопки сменился на другой макет для рисования в формате xml с надписью Music Off. При повторном нажатии музыка возобновится с того места, где она остановилась, и снова вернется к включению музыки.

Одна проблема, с которой я сталкиваюсь - это приостановка основного звука. Поскольку я новичок в Android, можно ли изменить переменную медиаплеера, на которую я ссылаюсь в своей основной деятельности, на другую деятельность? Кроме того, в моем задании опций у меня есть два оператора if при нажатии кнопки для изображения, чтобы проверить, воспроизводится ли звук, или нет, а затем либо приостановит, либо возобновит музыку, в зависимости от того, какой это звук. Я не уверен, как сделать второе заявление 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)

Ответы [ 2 ]

0 голосов
/ 16 января 2012

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

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

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

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

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

0 голосов
/ 16 января 2012

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

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

...