android - Code gets stuck at acquiring wake lock while registering with GCM -
i using gcm push notifications project, stuck @ acquiring wake lock.
log message:
09-03 17:04:05.003: v/gcmbroadcastreceiver(5772): onreceive:com.google.android.c2dm.intent.registration 09-03 17:04:05.003: v/gcmbroadcastreceiver(5772): gcm intentservice class: example.pro.gcmintentservice 09-03 17:04:05.049: v/gcmbaseintentservice(5772): acquiring wakelock
below manifest file:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="example.pro" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="16" android:targetsdkversion="17" /> <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.access_network_state" /> <!-- gcm requires google account. --> <uses-permission android:name="android.permission.get_accounts" /> <!-- keeps processor sleeping when message received. --> <uses-permission android:name="android.permission.wake_lock" /> <!-- creates custom permission app can receive messages. --> <permission android:name="example.pro.permission.c2d_message" android:protectionlevel="signature" /> <uses-permission android:name="example.pro.permission.c2d_message" /> <!-- app has permission register , receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.receive" /> <!-- network state permissions detect internet status --> <uses-permission android:name="android.permission.access_network_state" /> <!-- permission vibrate --> <uses-permission android:name="android.permission.vibrate" /> <application android:name="com.thinkappz.advancedtictactoe.friendpickerapplication" android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/theme.notitlebar" > <activity android:name="com.thinkappz.advancedtictactoe.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.google.ads.adactivity" android:configchanges="keyboard|keyboardhidden|orientation|screenlayout|uimode|screensize|smallestscreensize" /> <activity android:name="com.thinkappz.advancedtictactoe.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name=".mainactivity" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.gcmmainactivity" android:label="@string/app_name" > <intent-filter> <action android:name=".gcmmainactivity" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.newgame" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.newgame" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.vs_facebook" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.vs_facebook" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.randomplayer" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.randomplayer" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.register" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.register" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.registeractivity" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.registeractivity" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.sendrequest" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.sendrequest" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.pickfriendsactivity" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.pickfriendsactivity" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.getfinishedgames" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.getfinishedgames" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <activity android:name="com.thinkappz.advancedtictactoe.homescreen" android:label="@string/app_name" > <intent-filter> <action android:name="example.pro.homescreen" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> <meta-data android:name="com.facebook.sdk.applicationid" android:value="@string/app_id" /> <activity android:name="com.facebook.loginactivity" /> <receiver android:name="com.google.android.gcm.gcmbroadcastreceiver" android:permission="com.google.android.c2dm.permission.send" > <intent-filter> <!-- receives actual messages. --> <action android:name="com.google.android.c2dm.intent.receive" /> <!-- receives registration id. --> <action android:name="com.google.android.c2dm.intent.registration" /> <category android:name="example.pro" /> </intent-filter> </receiver> <service android:name="com.thinkappz.advancedtictactoe.gcmintentservice" /> </application> </manifest>
gcmintentservice----> class file inside com.thinkappz.advancedtictactoe
package, r.java file generated inside example.pro
. don't know why.
package com.thinkappz.advancedtictactoe; import javax.management.notification; public class gcmintentservice extends gcmbaseintentservice { private static final string tag = "gcmintentservice"; public gcmintentservice() { super(sender_id); } /** * method called on device registered **/ @override protected void onregistered(context context, string registrationid) { log.i(tag, "device registered: regid = " + registrationid); displaymessage(context, "your device registred gcm"); log.d("name", gcmmainactivity.name); serverutilities.register(context, gcmmainactivity.name, gcmmainactivity.email, registrationid); } /** * method called on device un registred * */ @override protected void onunregistered(context context, string registrationid) { log.i(tag, "device unregistered"); displaymessage(context, getstring(r.string.gcm_unregistered)); serverutilities.unregister(context, registrationid); } /** * method called on receiving new message * */ @override protected void onmessage(context context, intent intent) { log.i(tag, "received message"); string message = intent.getextras().getstring("price"); displaymessage(context, message); // notifies user generatenotification(context, message); } /** * method called on receiving deleted message * */ @override protected void ondeletedmessages(context context, int total) { log.i(tag, "received deleted messages notification"); string message = getstring(r.string.gcm_deleted, total); displaymessage(context, message); // notifies user generatenotification(context, message); } /** * method called on error * */ @override public void onerror(context context, string errorid) { log.i(tag, "received error: " + errorid); displaymessage(context, getstring(r.string.gcm_error, errorid)); } @override protected boolean onrecoverableerror(context context, string errorid) { // log message log.i(tag, "received recoverable error: " + errorid); displaymessage(context, getstring(r.string.gcm_recoverable_error, errorid)); return super.onrecoverableerror(context, errorid); } /** * issues notification inform user server has sent message. */ private static void generatenotification(context context, string message) { int icon = r.drawable.ic_launcher; long when = system.currenttimemillis(); notificationmanager notificationmanager = (notificationmanager) context .getsystemservice(context.notification_service); notification notification = new notification(icon, message, when); string title = context.getstring(r.string.app_name); intent notificationintent = new intent(context, mainactivity.class); // set intent not start new activity notificationintent.setflags(intent.flag_activity_clear_top | intent.flag_activity_single_top); pendingintent intent = pendingintent.getactivity(context, 0, notificationintent, 0); notification.setlatesteventinfo(context, title, message, intent); notification.flags |= notification.flag_auto_cancel; // play default notification sound notification.defaults |= notification.default_sound; // notification.sound = uri.parse("android.resource://" + // context.getpackagename() + "your_sound_file_name.mp3"); // vibrate if vibrate enabled notification.defaults |= notification.default_vibrate; notificationmanager.notify(0, notification); } }
i tried <service android:name="example.pro.gcmintentservice" />
giving me error while registering, saying can't instantiate service.
you using com.google.android.gcm.gcmbroadcastreceiver
broadcast receiver google gcm client library. class expects intent service in main package of app (example.pro
) intent service in different package - com.thinkappz.advancedtictactoe
. that's why receiver can't find service.
you should either move gcmintentservice
main package of app, or override gcmbroadcastreceiver
.
Comments
Post a Comment