【问题标题】:How to start a mediaplayer by pressing a button in android?如何通过按下android中的按钮来启动媒体播放器?
【发布时间】:2013-09-21 18:56:04
【问题描述】:

我是 android 新手,我现在正在做一个练习,应用程序已经在 /res/raw/ 文件夹中存储了一个音频文件(mp4),这个文件可以在 android Service 类中引用为R.raw.audiofile。在 Service 类中我创建了三个方法

onCreate();
onStartCommand();
onDestroy();

onCreate() 我创建了一个MediaPlayer,在onStartCommand() 我已经启动了MediaPlayer

mp.start() and 
returned STRT_STICKY

播放它并在onDestroy() 我已经这样做了:

mp.stop();

在 xml 布局中,我创建了一个具有此属性的 Button:

android:onClick="onClickStart"

它调用 MainActivity 中的一个方法,这个动作现在应该播放音频。但是,我现在被困在这里如何将其链接到音乐文件,以便此按钮应该启动音频。谁能给我一些想法?

所以我有一个 Main 活动类和一个 (My)Service 类(扩展到 Servcie)和一个用于布局的 xml 文件来执行此操作。

【问题讨论】:

  • 试试看这个[链接][1][1]:stackoverflow.com/questions/7291731/…
  • 是的,但它是一个不同的故事,因为它正在调用应用程序的站点外的音频文件。现在这是一个存储在应用程序本身中的文件,问题更多的是如何在主活动中实现按钮以调用服务,并且在 xml 文件中调用按钮

标签: android android-intent android-activity android-service android-mediaplayer


【解决方案1】:

您可以使用 Intent 或通过绑定到 Service 并发送消息来在 Activity 和 Service 之间进行通信。在这种情况下,绑定到服务并在按钮的单击侦听器中发送消息可能是最干净的方法。这也使您有机会通过在 Message 的 replyTo 字段中传递 Messenger/Handler 来适当地更新 UI。到 PC 后,我将使用代码 sn-ps 进行编辑。

编辑:

您需要的大部分代码都在 Android 文档here 中。

基本思想是您需要在您的Service 中创建一个Handler 类。执行此操作的正确方法(避免泄漏 Handler 和随附的 Lint 警告)如下:

private static class MyHandler extends Handler {
    private WeakReference<MyService> mService;

    public MyHandler(MyService service) {
        mService = service;
    }

    @Override
    public void handleMessage(Message msg) {
        // Your message handling here...
        // You can use the members/methods of the Service with
        //   mService.get().____
    }
}

然后您将创建一个Messenger 成员并覆盖Service 中的onBind 方法,如下所示:

private Messenger mMessenger = new Messenger(new MyHandler(this));

@Override
public IBinder onBind(Intent intent) {
    return mMessenger.getBinder();
}

然后您需要使用您的Activity 中的适当IntentServiceConnection 调用bindService。请参阅链接以获取代码示例。在ServiceConnectiononServiceConnected 方法中,您可以为Service 存储一个Messenger

@Override
public void onServiceConnected(ComponentName className, IBinder service) {
    mMessenger = new Messenger(service);
}

您同样可以在Activity 中创建HandlerMessenger,并将其作为发送到Service 的任何Message 对象的replyTo 字段提供。这样就可以告诉ActivityMediaPlayer是否启动成功,并根据需要更新UI。

【讨论】:

    【解决方案2】:

    你的按钮需要一个 OnclickListener 像

    button.setOnClickListener(new View.OnClickListener() {
                 public void onClick(View v) {
                     // Perform action on click
                 }
    

    在这里寻找MediaPlayer

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多