Sono riuscito a ottenere il mio headset buttons get recognized dalla mia app quando premuto, ma uno dei pulsanti deve chiamare un metodo che è in MyCustomActivity. Il problema è il 1 ° parametro di OnReceive è un contesto che non può essere gettato alle attività e utilizzando classe interna di un MyCustomActivitywon't work in Android 4.1 meno che non sia statica (che ha lo stesso problema di impossibilità di accedere il metodo di MyCustomActivity.Come passare un parametro ad una sottoclasse di BroadcastReceiver?
Quindi l'unica opzione a sinistra per me (al fine di sostenere sia 2.xe 4.1) è quello di passare l'attività come parametro per RemoteControlReceiver
Ma come faccio a farlo, quando l'unico modo per istanziare è via:.
private ComponentName mRemoteControlReceiver = new ComponentName(this, RemoteControlReceiver.class);
Quale non acc ept eventuali parametri aggiuntivi?
Qualche idea su come aggirare questa limitazione?
Nota: Se provo a definire RemoteControlReceiver
come avere un costruttore con un parametro, ricevo la seguente eccezione:
E/AndroidRuntime(2836): java.lang.RuntimeException: Unable to instantiate receiver com.example.RemoteControlReceiver: java.lang.InstantiationException: can't instantiate class com.example.RemoteControlReceiver; no empty constructor
Caused by:
E/AndroidRuntime(2836): Caused by: java.lang.InstantiationException: can't instantiate class com.example.RemoteControlReceiver; no empty constructor
E/AndroidRuntime(2836): at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(2836): at java.lang.Class.newInstance(Class.java:1319)
E/AndroidRuntime(2836): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2205)
Quindi è chiaro che questo nuovo requisito registerMediaButtonEventReceiver (introdotto in Android 4.1) si aspetta un costruttore vuoto .
Non c'è modo di aggirare questo problema?
Ad esempio, esiste un modo per ottenere un riferimento all'oggetto RemoteControlReceiver effettivo (istanziato indirettamente tramite mAudioManager.registerMediaButtonEventReceiver()
)? In modo che possa utilizzare un accessor per impostare un membro di dati di RemoteControlReceiver dopo è stato istanziato?
È possibile creare e registrare BroadcastReceier in onResume/onCreate dell'attività e annullare la registrazione all'interno di onPause/onStop. In questo modo l'attività corrente può occuparsi della sua durata e il ricevitore dovrebbe essere in grado di comunicare al suo contenitore (attività). –
@SudarNimalan L'ho già provato. Questo [funziona solo su Android 2.x] (http://stackoverflow.com/questions/15058743/how-do-i-register-in-manifest-an-inner-media-button-broadcastreciver#comment21174031_15058783). Non funziona in 4.1. Devo essere in grado di sapere in qualche modo "RemoteControlReceiver' (non BroadcastReceiver!) Sapere su MyCustomActivity. Grazie. – an00b
Questo è difficile ma ecco un'idea: puoi controllare [Extra] (http://stackoverflow.com/a/14383023/418055) passato con Intent onReceive? Oppure usa questo [trucco GlobalVariable] (http://stackoverflow.com/a/6980006/418055)? –