我收到了"记录"按钮。所需的功能是应用程序将在单击按钮时使用设备的麦克风开始录制,并在再次单击时停止。它的行为应与音乐应用的播放/暂停按钮类似。
还有其他方法可以在应用程序内部开始和停止录制。
我尝试以多种方式实现这一点,但我很困惑。按钮本身会收到一个PendingIntent
,所以一开始我就给了它在我的应用中记录声音的活动的意图。当然,这会让应用程序本身成为焦点,因此它并不好。
接下来,我尝试创建一个处理两种意图的IntentService
- "开始录制"和#34;停止录制"。我设法让它开始录制,但似乎只要它处理了"开始录制"意图,它关闭了,所以我的MediaRecorder
对象丢失了。
我尝试通过实施IntentService
来使我的onBind
绑定,但我真的混淆了.aidl
个文件等。
这里的正确方法是什么?
答案 0 :(得分:1)
您可以尝试在Service
回调中的普通onStartCommand(...)
内开始录制,并让PendingIntent
开始录制以启动此服务。
要停止服务,您无法设置停止服务的PendingIntent
,因此您必须具有创造性,并且可以使用BroadcastReceiver
来接收停止服务的意图
所以你要提供服务:
public class RecordingService extends Service {
MediaRecorder mRecorder;
...
public int onStartCommand(Intent intent, int flags, int startId) {
// initialize your recorder and start recording
}
public void onDestroy() {
// stop your recording and release your recorder
}
}
和你的广播接收器:
public class StopRecordingReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
context.stopService(new Intent(context, RecordingService.class));
}
}
PendingIntent
开始录制:
Intent i = new Intent(context, RecordingService.class);
PendingIntent pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent
停止录制:
Intent i = new Intent(context, StopRecordingReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);