2015-06-12 6 views
6

Ho una notifica con un pulsante "Registra". La funzionalità desiderata è che l'app inizi a registrare con il microfono del dispositivo quando si fa clic sul pulsante e si interrompe quando viene fatto nuovamente clic. Dovrebbe comportarsi in modo simile a un pulsante Riproduci/Pausa di un'app musicale.Avvia e interrompe la registrazione da un pulsante in una notifica

Esistono anche altri modi per avviare e interrompere la registrazione, all'interno dell'app stessa.

Ho provato a implementarlo in diversi modi, ma sono abbastanza confuso. Il pulsante stesso riceve un PendingIntent, quindi all'inizio ho dato l'intento dell'attività che registra l'audio nella mia app. Questo, ovviamente, mette a fuoco l'app stessa, quindi non va bene.

Successivamente, ho provato a creare un IntentService che gestisce due tipi di intenti: "Avvia registrazione" e "Interrompi registrazione". Sono riuscito a farlo avviare la registrazione, ma sembra che non appena ha gestito l'intento "Avvia registrazione", si è spento automaticamente, quindi il mio oggetto MediaRecorder è stato perso.

Ho provato a rendere il mio IntentService legabile implementando onBind, ma mi sono davvero mescolato con i file .aidl e simili.

Qual è l'approccio corretto qui?

risposta

1

Si potrebbe provare a iniziare la registrazione in un semplice vecchio Service nella richiamata onStartCommand(...) e fare in modo che PendingIntent inizi la registrazione avviare questo servizio.

Per interrompere il servizio, non si può fare un PendingIntent che ferma un servizio, in modo che avrebbe dovuto essere creativi, e potrebbe utilizzare un BroadcastReceiver per ricevere l'intenzione di interrompere il servizio.

Così Saresti vostro servizio:

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

e il ricevitore di broadcast:

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

PendingIntent per avviare la registrazione:

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

PendingIntent per interrompere la registrazione:

Intent i = new Intent(context, StopRecordingReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
Problemi correlati