我想在菜单类之外创建一个全局菜单类,而不是在我的菜单类中创建一个全局的菜单类,无论启动哪个活动,我都可以调用它来保持声音播放。我是Java的菜鸟,但是我已经搜索过,找不到解决方案。这是我的"菜单"活动。如您所见,我的媒体播放器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();
}
实现需求的最佳方法是使用服务。您可以在应用初始化时启动服务。在服务内部启动媒体播放器并开始播放。因此,即使您正在导航到下一个或其他活动,媒体也会继续播放。您还可以为服务指定属性,何时开始广告停止。暂停或停止媒体播放器,您可以停止服务,以便中间播放器也停止播放。希望此链接肯定会对您有所帮助。
您的问题的答案就在 Android 参考中:
媒体播放
如果您希望媒体在后台播放,即使 应用程序不在屏幕上,也就是说,您希望它继续播放 当用户与其他应用程序交互时,您必须 启动服务并从那里控制媒体播放器实例。你 应该小心此设置,因为用户和系统 对应用程序如何运行后台有期望 服务应与系统的其余部分交互。如果你的 应用程序没有满足这些期望,用户可能有 糟糕的体验。本节介绍您应该遇到的主要问题 注意并提供有关如何接近它们的建议。
创建如下所示的服务:
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));
希望对您有所帮助。