2015-06-12 14 views
6

Mam powiadomienie z przyciskiem "Nagraj". Pożądaną funkcją jest to, że aplikacja zacznie nagrywać z mikrofonem urządzenia po kliknięciu przycisku i zatrzyma się po ponownym kliknięciu. Powinien zachowywać się podobnie do przycisku Play/Pause w aplikacji muzycznej.Rozpocznij i zatrzymaj nagrywanie za pomocą przycisku w powiadomieniu

Istnieją również inne sposoby rozpoczęcia i zakończenia nagrywania w samej aplikacji.

Próbowałem wprowadzić to w życie na kilka sposobów, ale jestem bardzo zdezorientowany. Sam przycisk otrzymuje numer PendingIntent, więc najpierw nadałem mu intencję działania, które rejestruje dźwięk w mojej aplikacji. To, oczywiście, skupia się na samej aplikacji, więc nie jest to dobre.

Następnie próbowałem utworzyć IntentService, który obsługuje dwa rodzaje intencji - "Rozpocznij nagrywanie" i "Zatrzymaj nagrywanie". Udało mi się go nagrać, ale wydaje mi się, że zaraz po wykonaniu operacji "Rozpocznij nagrywanie" wyłączyło się, więc mój obiekt został utracony.

Próbowałem uczynić mój IntentService bindable przez wdrożenie onBind, ale naprawdę się pomyliłem z plikami .aidl i tym podobnymi.

Jakie jest właściwe podejście?

Odpowiedz

1

Możesz spróbować uruchomić nagrywanie w zwykłym starym numerze identyfikacyjnym Service w wywołaniu zwrotnym onStartCommand(...), a rozpoczęcie PendingIntent rozpoczęcia nagrywania rozpocznie tę usługę.

Aby zatrzymać usługę, nie można wykonać usługi PendingIntent, która zatrzymuje usługę, więc trzeba być kreatywnym i użyć numeru BroadcastReceiver, aby otrzymać zamiar zatrzymania usługi.

Więc chcesz uczynić swoją usługę:

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

i odbiornik nadanie:

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

PendingIntent aby rozpocząć nagrywanie:

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

PendingIntent aby zatrzymać nagrywanie:

Intent i = new Intent(context, StopRecordingReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
Powiązane problemy