gpt4 book ai didi

java - 广播接收器作为Android中的内部类

转载 作者:IT老高 更新时间:2023-10-28 20:55:48 26 4
gpt4 key购买 nike

在我的代码中有一个扩展BroadcastReceiver的内部类。

我在 AndroidManifest.xml 中添加了以下行:

<receiver android:name="OuterClass$InnerClass android:enabled="true"/>

但我收到以下错误:

unable to instantiate receiver org.example.test.OuterClass$InnerClass

我该如何解决这个问题?

最佳答案

一个(非静态)inner class Android 无法通过 AndroidManifest.xml ( Android developer documentation on BroadcastReceiver ) 实例化:

You can either dynamically register an instance of this class with Context.registerReceiver() or statically publish an implementation through the tag in your AndroidManifest.xml.

所以你可以动态注册接收者。在我的应用程序中,我想使用 Google 的 Cloud to Device Messaging (C2DM) 和我的原始 AndroidManifest.xml 执行相同的操作:

<application...>
<receiver android:name=".MyC2dmReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.myapp" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.example.myapp" />
</intent-filter>
</receiver>
</application>

我删除了 receiver 部分并动态注册了接收器,如下所示:

public class AndroidService extends IntentService
{
...
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
IntentFilter filter = new IntentFilter();
filter.addAction("com.google.android.c2dm.intent.RECEIVE");
filter.addAction("com.google.android.c2dm.intent.REGISTRATION");
filter.addCategory("com.example.myapp");
this.registerReceiver(new MyC2dmReceiver(), filter, "com.google.android.c2dm.permission.SEND", null);
return super.onStartCommand(intent,flags,startId);
}

public class MyC2dmReceiver extends BroadcastReceiver
{
...
}
}

关于java - 广播接收器作为Android中的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3608955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com