0

我不想在我的菜单类中创建一个,而是想在菜单类之外创建一个全局的,无论启动哪个活动,我都可以调用它来保持声音播放。我是java的菜鸟,但我已经搜索并找不到解决方案。这是我的“菜单”活动。如您所见,我的 MediaPlayer snd 是本地的,因此在调用 onPause 方法时它会暂停。

    public class Menu extends Activity{

MediaPlayer snd;
ToggleButton btnSound;

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu);
    snd = MediaPlayer.create(getApplicationContext(), R.raw.bgmusic);
    snd.start();
    btnSound = (ToggleButton) findViewById(R.id.tglSound);

@Override
protected void onPause() {
    super.onPause();
    snd.pause();
}
4

3 回答 3

3

实现您的要求的最佳方式是使用服务。您可以在应用程序初始化时启动服务。在服务内部启动一个媒体播放器并开始播放。因此,即使您正在导航到下一个活动或其他活动,媒体也会继续播放。您还可以将属性赋予服务何时开始广告停止。想暂停或停止媒体播放器,您可以停止服务,以便媒体播放器也停止播放。希望此链接对您有所帮助。

于 2013-10-25T05:19:36.150 回答
1

您的问题的答案在于 Android 参考:

媒体播放

如果您希望您的媒体即使在您的应用程序不在屏幕上时也能在后台播放——也就是说,您希望它在用户与其他应用程序交互时继续播放——那么您必须启动一个服务并从那里控制 MediaPlayer 实例。您应该小心这种设置,因为用户和系统对运行后台服务的应用程序应该如何与系统的其余部分进行交互有期望。如果您的应用程序没有满足这些期望,则用户可能会有不好的体验。本节描述了您应该注意的主要问题,并提供了有关如何解决这些问题的建议。

于 2013-10-25T05:14:36.960 回答
0

创建一个像这个片段这样的服务:

public class whatEverYourServiceName extends Service{


@Override
public void onStart(Intent intent, int startId){
super.onStart(intent, startId);

//Add your code here mate

}


@Override
public void onDestroy(){
super.onDestroy();

//Add what do you want to do here when the service is stop like do a backflip
snd.pause();
}

@Override
public IBinder onBind(Intent arg0) {

return null;
}

}

然后使用它调用它

Intent it = new Intent();
it.setAction("your.package.name.whatEverYourServiceName");
startService(it);

然后将此添加到您的清单中

 <service
    android:name="your.package.name.whatEverYourServiceName"
    android:label="Your Service Homie"
    android:process=":my_process" >
    <intent-filter>
        <action android:name="your.package.name.whatEverYourServiceName" >
        </action>
    </intent-filter>
</service>

要停止声音,只需使用此停止服务

stopService(new Intent(this, whatEverYourServiceName.class));

希望能帮助到你。

于 2013-10-25T05:19:24.977 回答