我想创建一个全局媒体播放器,无论显示哪种布局,它都会继续播放



我想在菜单类之外创建一个全局菜单类,而不是在我的菜单类中创建一个全局的菜单类,无论启动哪个活动,我都可以调用它来保持声音播放。我是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));

希望对您有所帮助。

最新更新