我正在尝试根据文档设置Parse.com推送通知:
我的清单xml有以下相关条目:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hello.world"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
....
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- NOTE THIS NEXT LINE -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="com.hello.world.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.hello.world.permission.C2D_MESSAGE" />
....
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<receiver
android:name="com.parse.ParsePushBroadcastReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.parse.push.intent.RECEIVE" />
<action android:name="com.parse.push.intent.DELETE" />
<action android:name="com.parse.push.intent.OPEN" />
</intent-filter>
</receiver>
<receiver
android:name="com.parse.GcmBroadcastReceiver"
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.hello.world" />
</intent-filter>
</receiver>
</application>
如上所述,在清单中添加parse.com推送相关配置后——应用程序已停止工作——它只是在启动时挂起,我看不到第一个屏幕。
编辑1
调试后,我发现应用程序在尝试第一次调用Parse:时挂起
ParseQuery<ParseObject> query = ParseQuery.getQuery("myclass");
List<ParseObject> myclassresult = query.find();//App Hangs at THIS line
为什么只有添加Parse.com推送配置时才会出现这种情况
这条线和应用程序在没有Parse.com推送配置的情况下运行良好
(还要注意,我还没有在Parse.com上为应用程序做任何特定的配置来启用推送,我使用的是普通的Parse.com sdk,而不是任何用于推送通知的特殊sdk)
编辑2
当我查看相关线程(AsyncTask#1)堆栈跟踪时,我看到以下内容:
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:364)
at bolts.Task.waitForCompletion(Task.java:119)
at com.parse.Parse.waitForTask(Parse.java:721)
at com.parse.ParseUser.getCurrentUser(ParseUser.java:1044)
at com.parse.ParseQuery.getUser(ParseQuery.java:298)
at com.parse.ParseQuery.findInBackground(ParseQuery.java:892)
at com.parse.ParseQuery.find(ParseQuery.java:529)
at com.hello.world.MyQueryClass.getDataFromParse(MyQueryClass.java:..)
...
解决方案是卸载应用程序,然后重新安装。仅仅在现有应用程序上重新安装是不起作用的,反而会导致奇怪的行为!
如果有人知道原因,请发表评论。