我成功让我的应用程序识别了耳机按钮的按下操作,但其中一个按钮需要调用MyCustomActivity中的一个方法。问题在于onReceive的第一个参数是Context类型,不能转换为Activity类型,并且使用MyCustomActivity的内部类在Android 4.1中无法工作,除非它是静态的(这有同样无法访问MyCustomActivity方法的问题)。
所以,唯一留给我的选择(为了支持2.x和4.1)就是将活动作为参数传递给RemoteControlReceiver。
但是,当实例化RemoteControlReceiver的唯一方法是通过以下方式时,我该怎么办?
很明显,这个新的registerMediaButtonEventReceiver要求(在Android 4.1中引入)期望一个空的构造函数。
有没有什么方法可以解决这个问题?
例如,是否有一种方法可以获取对实际RemoteControlReceiver对象的引用(通过mAudioManager.registerMediaButtonEventReceiver()间接实例化)? 这样我就可以在实例化后使用访问器来设置RemoteControlReceiver的数据成员。
所以,唯一留给我的选择(为了支持2.x和4.1)就是将活动作为参数传递给RemoteControlReceiver。
但是,当实例化RemoteControlReceiver的唯一方法是通过以下方式时,我该怎么办?
private ComponentName mRemoteControlReceiver = new ComponentName(this, RemoteControlReceiver.class);
哪个不接受任何附加参数?
有什么办法可以解决这个限制?
注意: 如果我尝试将RemoteControlReceiver
定义为具有参数的构造函数,则会收到以下异常:
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)
很明显,这个新的registerMediaButtonEventReceiver要求(在Android 4.1中引入)期望一个空的构造函数。
有没有什么方法可以解决这个问题?
例如,是否有一种方法可以获取对实际RemoteControlReceiver对象的引用(通过mAudioManager.registerMediaButtonEventReceiver()间接实例化)? 这样我就可以在实例化后使用访问器来设置RemoteControlReceiver的数据成员。
RemoteControlReceiver
(而不是BroadcastReceiver!)知道MyCustomActivity的存在。谢谢。 - an00b