如何通过按下android中的按钮来启动媒体播放器?

时间:2013-09-17 11:02:25

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

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

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

onCreate()我创建了一个MediaPlayer,在onStartCommand()我已经开始了MediaPlayer

mp.start() and 
returned STRT_STICKY

播放它并在onDestroy()我做了这个:

mp.stop();

在xml布局中我创建了一个具有以下属性的按钮:

android:onClick="onClickStart"

调用MainActivity中的方法,此操作现在应该播放音频。但是,我现在仍然坚持如何将其链接到音乐文件,以便此按钮应该启动音频。任何人都可以给我一些想法吗?

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

2 个答案:

答案 0 :(得分:1)

你的Button需要一个OnclickListener

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

在这里查看MediaPlayer

答案 1 :(得分:1)

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

编辑:

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

基本想法是您需要在Handler内创建Service课程。正确的方法(避免泄漏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成员并覆盖onBind中的Service方法,如下所示:

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

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

然后,您需要使用bindService中适当的IntentServiceConnection来呼叫Activity。请参阅链接以获取代码示例。在onServiceConnected的{​​{1}}方法中,您可以使用以下内容隐藏ServiceConnection Messenger

Service

您同样可以在@Override public void onServiceConnected(ComponentName className, IBinder service) { mMessenger = new Messenger(service); } 中创建HandlerMessenger,并将其作为发送给{{Activity对象的replyTo字段提供1}}。通过这种方式,您可以告诉Message Service是否成功启动并根据需要更新用户界面。