我的问题与[C2DMReg] handleRequest 捕获 java.net.UnknownHostException: android.clients.google.com有关我在 StackOverflow 中发现了一些问题,其标题相同,已被标记为重复。但所提到的副本与这里所关心的问题无关。这与新的 GCM 相关 - 而不是 C2DM。
我的代码源来自 Android API Guide 中的 GCM 教程
我向 GCM 注册设备的功能如下:
public void register_device(Context c){
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(c, 0, new Intent(), 0));
registrationIntent.putExtra("sender", c.getResources().getString(R.string.SERVER_API_KEY));
Log.i("GCM", "Starting service for registration Intent");
}
我的 BroadCastReceiver 类如下:
public class MyBroadcastReceiver extends BroadcastReceiver {
public final void onReceive(Context context, Intent intent) {
Log.i("GCM", "Received broadcast from Intent: " + intent);
MyIntentService.runIntentInService(context, intent);
setResult(MainActivity.RESULT_OK, null, null);
}
}
我的清单文件包含 MyBroadcastReceiver 的权限,如下所示
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="com.mangoesmobile.praxis.pusher.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.mangoesmobile.praxis.pusher.permission.C2D_MESSAGE" />
<application>
<receiver
android:name=".MyBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.mangoesmobile.praxis.pusher" />
</intent-filter>
</receiver>
</application>
日志显示来自 register_device 函数()的自定义日志Starting service for registration Intent
然后[C2DMReg] handleRequest caught java.net.UnknownHostException: android.clients.google.com
用标签显示C2DMRegistrar
它从不显示Received broadcast from Intent
来自 MyBroadcastReceiver 的自定义日志。所以我相信它永远不会到达 MyBroadcastReceiver。我无法弄清楚为什么会发生这种情况。
我没有使用模拟器。我正在使用我自己的设备,并且它是使用谷歌帐户注册的。