Java 媒体播放器和If声明

Java 媒体播放器和If声明,java,android,eclipse,android-layout,android-mediaplayer,Java,Android,Eclipse,Android Layout,Android Mediaplayer,因此,我试图创建一个显示图像按钮的活动。图像按钮的背景指向drawable文件夹中的xml,以显示聚焦的不同图片,然后单击。一切正常。我的主要活动中有音乐,设置为循环。默认情况下,“图像”按钮设置为“打开音乐”。我想要发生的是,当单击按钮时,主声音将暂停,按钮背景将更改为不同的xml可绘制布局,显示音乐关闭。再次单击时,音乐将从其停止的位置恢复,然后再次切换回“音乐打开” 我遇到的一个问题是主音暂停。由于我是android新手,我在主要活动中引用的媒体播放器变量是否可以在其他活动中更改?此外,在

因此,我试图创建一个显示图像按钮的活动。图像按钮的背景指向drawable文件夹中的xml,以显示聚焦的不同图片,然后单击。一切正常。我的主要活动中有音乐,设置为循环。默认情况下,“图像”按钮设置为“打开音乐”。我想要发生的是,当单击按钮时,主声音将暂停,按钮背景将更改为不同的xml可绘制布局,显示音乐关闭。再次单击时,音乐将从其停止的位置恢复,然后再次切换回“音乐打开”

我遇到的一个问题是主音暂停。由于我是android新手,我在主要活动中引用的媒体播放器变量是否可以在其他活动中更改?此外,在我的“选项”活动中,我在“单击图像”按钮下有两个“如果”语句,用于检查声音是否正在播放,然后将根据播放的音乐暂停或恢复播放。我不知道如何做第二个if语句,但我有一个我认为可能是正确的

很抱歉,我正在尝试做很多不同的事情,但我试图将其分解。另外,当我启动optionsActivity时,我会关闭force,我会把所有东西都放在下面,包括主活动,因为那是我建立主声音的地方。谢谢你能给我的任何帮助

主要活动:

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

    }

}
选项活动:

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)
01-15 16:10:55.059:E/AndroidRuntime(7319):致命异常:主
01-15 16:10:55.059:E/AndroidRuntime(7319):java.lang.RuntimeException:无法实例化活动组件信息{com.frazzycastles/com.frazzycastles.optionActivity}:java.lang.NullPointerException
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.app.ActivityThread.access$2500(ActivityThread.java:129)
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.os.Handler.dispatchMessage(Handler.java:99)上
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.os.Looper.loop(Looper.java:143)上
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.app.ActivityThread.main(ActivityThread.java:4701)上
01-15 16:10:55.059:E/AndroidRuntime(7319):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-15 16:10:55.059:E/AndroidRuntime(7319):位于java.lang.reflect.Method.invoke(Method.java:521)
01-15 16:10:55.059:E/AndroidRuntime(7319):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-15 16:10:55.059:E/AndroidRuntime(7319):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-15 16:10:55.059:E/AndroidRuntime(7319):在dalvik.system.NativeStart.main(本机方法)
01-15 16:10:55.059:E/AndroidRuntime(7319):由以下原因引起:java.lang.NullPointerException
01-15 16:10:55.059:E/AndroidRuntime(7319):位于android.content.ContextWrapper.getResources(ContextWrapper.java:80)
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.media.MediaPlayer.create(MediaPlayer.java:641)上
01-15 16:10:55.059:E/AndroidRuntime(7319):在com.crazycastles.optionsActivity。(optionsActivity.java:17)
01-15 16:10:55.059:E/AndroidRuntime(7319):位于java.lang.Class.newInstanceImpl(本机方法)
01-15 16:10:55.059:E/AndroidRuntime(7319):位于java.lang.Class.newInstance(Class.java:1429)
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.app.Instrumentation.newActivity(Instrumentation.java:1021)上
01-15 16:10:55.059:E/AndroidRuntime(7319):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2651)
由于我是android新手,我在主要活动中引用的媒体播放器变量是否可以在其他活动中更改


不可以。如果在活动中创建
MediaPlayer
,则只能在该活动处于前台时使用。如果你打算在用户离开活动后继续播放,你的
MediaPlayer
很可能应该由
服务管理。

我还开发了一款Android音乐播放器

我遇到的一个问题是主音暂停。因为我是新手 我在主要活动中引用的媒体播放器变量可以是android吗 在不同的活动中发生了变化

如果您将它声明为静态对象,我可以说它

此外,在我的“选项”活动中,在“打开”下有两个if语句 单击“图像”按钮以检查声音是否正在播放 不是,然后将根据需要暂停或恢复音乐 是哪一个。我不知道如何做第二个if语句,但我 有我认为可能是对的第一个


我想你必须看看Android Media Player的生命周期,你可以重复使用你的对象,但有一些条件:

好的,这就是我想要做的。让它在背景中循环,直到我需要它暂停。因此,我会使用服务吗?@ZachJ:是的,这里似乎适合使用服务。你能提供一个链接或给我指出正确的方向吗。我不知道如何使用服务。Thanks@ZachJ.:一本书需要几章的篇幅。您可以阅读较旧但免费的--单击CreativeCommons许可版本的“四到免费保证”选项卡。