2015-06-12 11 views
6

Tôi có thông báo với nút "Ghi". Chức năng mong muốn là ứng dụng sẽ bắt đầu quay bằng micrô của thiết bị khi nút được nhấp và dừng lại khi được nhấp lại. Nó sẽ hoạt động tương tự như nút Phát/Tạm dừng của ứng dụng nhạc.Bắt đầu và dừng ghi âm từ một nút trong thông báo

Ngoài ra còn có các cách khác để bắt đầu và dừng ghi âm, bên trong chính ứng dụng.

Tôi đã cố thực hiện điều này theo nhiều cách, nhưng tôi khá bối rối. Nút chính nó nhận được một PendingIntent, vì vậy lúc đầu tôi đã cho nó ý định của hoạt động ghi lại âm thanh trong ứng dụng của tôi. Điều này, tất nhiên, đặt các ứng dụng chính nó vào tập trung, vì vậy nó không tốt.

Tiếp theo, tôi đã cố gắng tạo một IntentService xử lý hai loại ý định - "Bắt đầu ghi" và "Dừng ghi". Tôi quản lý để làm cho nó bắt đầu ghi, nhưng có vẻ như ngay sau khi nó xử lý ý định "Bắt đầu ghi âm", nó tự tắt, vì vậy đối tượng MediaRecorder của tôi đã bị mất.

Tôi đã cố gắng làm cho IntentService của mình có thể ràng buộc bằng cách triển khai onBind, nhưng tôi thực sự đã trộn lẫn với các tệp .aidl và các loại tương tự.

Cách tiếp cận chính xác ở đây là gì?

Trả lời

1

Bạn có thể thử bắt đầu ghi âm trong một đồng bằng cũ Service trong gọi lại onStartCommand(...) và tạo PendingIntent để bắt đầu ghi bắt đầu dịch vụ này.

Để ngừng dịch vụ, bạn không thể thực hiện PendingIntent để dừng dịch vụ, vì vậy bạn phải sáng tạo và có thể sử dụng BroadcastReceiver để nhận được ý định dừng dịch vụ.

Vì vậy, bạn muốn làm cho dịch vụ của bạn:

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 
    } 
} 

và máy thu phát sóng của bạn:

public class StopRecordingReceiver extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
     context.stopService(new Intent(context, RecordingService.class)); 
    } 
} 

PendingIntent để bắt đầu ghi:

Intent i = new Intent(context, RecordingService.class); 
PendingIntent pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

PendingIntent để dừng ghi:

Intent i = new Intent(context, StopRecordingReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
Các vấn đề liên quan