有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java媒体播放器和If语句

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

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

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

主要活动:

package com.crazycastles;


import 安卓.app.Activity;
import 安卓.content.Intent;
import 安卓.media.MediaPlayer;
import 安卓.os.Bundle;
import 安卓.view.KeyEvent;
import 安卓.view.View;
import 安卓.view.View.OnClickListener;
import 安卓.view.Window;
import 安卓.view.WindowManager;
import 安卓.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 安卓.app.Activity;
import 安卓.content.Intent;
import 安卓.media.MediaPlayer;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.view.Window;
import 安卓.view.WindowManager;
import 安卓.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 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at 安卓.app.ActivityThread.access$2500(ActivityThread.java:129)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at 安卓.os.Handler.dispatchMessage(Handler.java:99)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at 安卓.os.Looper.loop(Looper.java:143)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at com.安卓.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 安卓.content.ContextWrapper.getResources(ContextWrapper.java:80)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at 安卓.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 安卓.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-15 16:10:55.059: E/AndroidRuntime(7319):     at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2651)

共 (2) 个答案

  1. # 1 楼答案

    Since I'm new to android can a media player variable I reference in my main activity be changed in a different activity?

    否。如果在活动中创建MediaPlayer,则只能在该活动处于前台时使用。如果您计划在用户离开活动后继续播放MediaPlayer,那么您的Service很可能应该由Service管理

  2. # 2 楼答案

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

    One problem I am having is pausing the main sound. Since I'm new to android can a media player variable I reference in my main activity be changed in a different activity?

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

    Also, in my options activity I have two if statements under the on click for the image button to check whether the sound is playing or isn't and then will either pause or resume the music depending on which one it is. I am not sure how to do the second if statement but I have the first one that I think might be right.

    我想你必须看看Android Media Player的生命周期,你可以重用你的对象,但有一些条件:http://developer.android.com/reference/android/media/MediaPlayer.html