我是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文件来执行此操作。
答案 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
中适当的Intent
和ServiceConnection
来呼叫Activity
。请参阅链接以获取代码示例。在onServiceConnected
的{{1}}方法中,您可以使用以下内容隐藏ServiceConnection
Messenger
Service
您同样可以在@Override
public void onServiceConnected(ComponentName className, IBinder service) {
mMessenger = new Messenger(service);
}
中创建Handler
和Messenger
,并将其作为发送给{{Activity
对象的replyTo
字段提供1}}。通过这种方式,您可以告诉Message
Service
是否成功启动并根据需要更新用户界面。