从通知中的按钮开始和停止录制

时间:2015-06-12 17:12:41

标签: android android-intent

我收到了"记录"按钮。所需的功能是应用程序将在单击按钮时使用设备的麦克风开始录制,并在再次单击时停止。它的行为应与音乐应用的播放/暂停按钮类似。

还有其他方法可以在应用程序内部开始和停止录制。

我尝试以多种方式实现这一点,但我很困惑。按钮本身会收到一个PendingIntent,所以一开始我就给了它在我的应用中记录声音的活动的意图。当然,这会让应用程序本身成为焦点,因此它并不好。

接下来,我尝试创建一个处理两种意图的IntentService - "开始录制"和#34;停止录制"。我设法让它开始录制,但似乎只要它处理了"开始录制"意图,它关闭了,所以我的MediaRecorder对象丢失了。

我尝试通过实施IntentService来使我的onBind绑定,但我真的混淆了.aidl个文件等。

这里的正确方法是什么?

1 个答案:

答案 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);