我尝试使用UrbanAirship推送通知来实现我的应用程序。
当我启动应用程序并且它处于后台(但处于活动状态)时,我正确地收到了推送通知,但是当我的应用程序被清理时发送推送通知(因为我的设备需要空间或因为我清理了RAM)我崩溃了。
这是LogCat:
04-16 16:09:34.082:E / AndroidRuntime(19680):FATAL EXCEPTION:main 04-16 16:09:34.082:E / AndroidRuntime(19680): java.lang.RuntimeException:无法启动接收器 com.urbanairship.push.GCMPushReceiver:java.lang.NullPointerException 04-16 16:09:34.082:E / AndroidRuntime(19680):at android.app.ActivityThread.handleReceiver(ActivityThread.java:2258) 04-16 16:09:34.082:E / AndroidRuntime(19680):at android.app.ActivityThread.access $ 1600(ActivityThread.java:134)04-16 16:09:34.082:E / AndroidRuntime(19680):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1293) 04-16 16:09:34.082:E / AndroidRuntime(19680):at android.os.Handler.dispatchMessage(Handler.java:99)04-16 16:09:34.082:E / AndroidRuntime(19680):at android.os.Looper.loop(Looper.java:137)04-16 16:09:34.082: E / AndroidRuntime(19680):at android.app.ActivityThread.main(ActivityThread.java:4856)04-16 16:09:34.082:E / AndroidRuntime(19680):at java.lang.reflect.Method.invokeNative(Native Method)04-16 16:09:34.082:E / AndroidRuntime(19680):at java.lang.reflect.Method.invoke(Method.java:511)04-16 16:09:34.082: E / AndroidRuntime(19680):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007) 04-16 16:09:34.082:E / AndroidRuntime(19680):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)04-16 16:09:34.082:E / AndroidRuntime(19680):at dalvik.system.NativeStart.main(Native Method)04-16 16:09:34.082: E / AndroidRuntime(19680):引起:java.lang.NullPointerException 04-16 16:09:34.082:E / AndroidRuntime(19680):at com.urbanairship.push.PushService.acquireWakeLock(PushService.java:341) 04-16 16:09:34.082:E / AndroidRuntime(19680):at com.urbanairship.push.PushService.runGcmIntentInService(PushService.java:160) 04-16 16:09:34.082:E / AndroidRuntime(19680):at com.urbanairship.push.GCMPushReceiver.onReceive(GCMPushReceiver.java:80) 04-16 16:09:34.082:E / AndroidRuntime(19680):at android.app.ActivityThread.handleReceiver(ActivityThread.java:2251) 04-16 16:09:34.082:E / AndroidRuntime(19680):... 10 more
有时我和这个人一起得到这个:
04-16 15:19:00.420:E / UA AP(10730):无法自动关闭04-16 15:19:00.420:D / AndroidRuntime(10730):关闭VM 04-16 15:19:00.430:W / dalvikvm(10730):threadid = 1:线程退出 未捕获的异常(组= 0x412462a0)04-16 15:19:00.430: E / AndroidRuntime(10730):致命异常:主04-16 15:19:00.430: E / AndroidRuntime(10730):java.lang.RuntimeException:无法创建 service com.urbanairship.analytics.EventService: java.lang.NullPointerException 04-16 15:19:00.430: E / AndroidRuntime(10730):at android.app.ActivityThread.handleCreateService(ActivityThread.java:2395) 04-16 15:19:00.430:E / AndroidRuntime(10730):at android.app.ActivityThread.access $ 1700(ActivityThread.java:134)04-16 15:19:00.430:E / AndroidRuntime(10730):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1299) 04-16 15:19:00.430:E / AndroidRuntime(10730):at android.os.Handler.dispatchMessage(Handler.java:99)04-16 15:19:00.430:E / AndroidRuntime(10730):at android.os.Looper.loop(Looper.java:137)04-16 15:19:00.430: E / AndroidRuntime(10730):at android.app.ActivityThread.main(ActivityThread.java:4856)04-16 15:19:00.430:E / AndroidRuntime(10730):at java.lang.reflect.Method.invokeNative(Native Method)04-16 15:19:00.430:E / AndroidRuntime(10730):at java.lang.reflect.Method.invoke(Method.java:511)04-16 15:19:00.430: E / AndroidRuntime(10730):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007) 04-16 15:19:00.430:E / AndroidRuntime(10730):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)04-16 15:19:00.430:E / AndroidRuntime(10730):at dalvik.system.NativeStart.main(Native Method)04-16 15:19:00.430: E / AndroidRuntime(10730):引起:java.lang.NullPointerException 04-16 15:19:00.430:E / AndroidRuntime(10730):at com.urbanairship.analytics.EventService.onCreate(EventService.java:96) 04-16 15:19:00.430:E / AndroidRuntime(10730):at android.app.ActivityThread.handleCreateService(ActivityThread.java:2385) 04-16 15:19:00.430:E / AndroidRuntime(10730):... 10 more
可能是库错误???
这是我的MainActivity:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
AirshipConfigOptions options = AirshipConfigOptions.loadDefaultOptions(this.getApplication());
UAirship.takeOff(this.getApplication(), options);
PushManager.enablePush();
PushManager.shared().setIntentReceiver(IntentReceiver.class);
getWindow();
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
[...]
我的AndroidManifext.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="MY_PACKAGE_NAME_ALREADY_WRITTEN"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!-- Required for the Urban Airship library -->
<permission android:name="MY_PACKAGE_NAME_ALREADY_WRITTEN.permission.UA_DATA"
android:protectionLevel="signature" />
<uses-permission android:name="MY_PACKAGE_NAME_ALREADY_WRITTEN.permission.UA_DATA" />
<!-- Required for Push -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- This app has permission to register with GCM and receive message -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="MY_PACKAGE_NAME_ALREADY_WRITTEN.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="MY_PACKAGE_NAME_ALREADY_WRITTEN.permission.C2D_MESSAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyBYtJ0bj7ckKWN8drcwYYvnAy_Sbb8y4Xk"/>
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/APP_ID"/>
<!-- Required for the library -->
<provider android:name="com.urbanairship.UrbanAirshipProvider"
android:authorities="MY_PACKAGE_NAME_ALREADY_WRITTEN.urbanairship.provider"
android:permission="MY_PACKAGE_NAME_ALREADY_WRITTEN.permission.UA_DATA"
android:exported="true"
android:multiprocess="true" />
<!-- Required for Push -->
<service android:name="com.urbanairship.push.PushService"/>
<receiver android:name="com.urbanairship.CoreReceiver" />
<receiver android:name="com.urbanairship.push.GCMPushReceiver"
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="MY_PACKAGE_NAME_ALREADY_WRITTEN" />
</intent-filter>
<!-- Required for detecting when the application is upgraded so it can request a new GCM ID -->
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package"/>
</intent-filter>
</receiver>
<receiver android:name="MY_PACKAGE_NAME_ALREADY_WRITTEN.IntentReceiver" />
<!-- Required for analytics -->
<service android:name="com.urbanairship.analytics.EventService"/>
<!-- Required for Rich Push -->
<service android:name="com.urbanairship.richpush.RichPushUpdateService"/>
<!-- Required for Actions -->
<activity android:name="com.urbanairship.actions.ActionActivity"/>
<service android:name="com.urbanairship.actions.ActionService"/>
<!-- Required for Landing Page Action -->
<activity
android:name="com.urbanairship.actions.LandingPageActivity"
android:parentActivityName="MY_PACKAGE_NAME_ALREADY_WRITTEN.MainActivity"
android:exported="false">
<!-- MODIFICATION REQUIRED set or remove the parent activity -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="MY_PACKAGE_NAME_ALREADY_WRITTEN.splash" />
<intent-filter>
<action android:name="com.urbanairship.actions.SHOW_LANDING_PAGE_INTENT_ACTION"/>
<data android:scheme="http" />
<data android:scheme="https" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity
android:name="MY_PACKAGE_NAME_ALREADY_WRITTEN.splash"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.facebook.LoginActivity"
android:label="@string/title_facebook_login" >
</activity>
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
<activity android:name=".HomeActivity"
android:screenOrientation="portrait"></activity>
</application>
提前谢谢