Android Broadcast intent
I am sending a message whit Google service from my desktop to my android when i get the message i am broadcasting whit intent and them passing in to an activity after the broadcast i have a crash of my app my log cut
W/dalvikvm(27503): threadid=1: thread exiting with uncaught exception (group=0x418e7ba8)
FATAL EXCEPTION: main
Process: com.avakoo.service, PID: 27503
java.lang.RuntimeException: Error receiving broadcast Intent { act=com.avakoo.service.DISPLAY_MESSAGE flg=0x10 (has extras) } in com.avakoo.service.MainActivity$1@4262fb78
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:769)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.avakoo.service.MainActivity$1.onReceive(MainActivity.java:226)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:759)
... 9 more
I/Process(27503): Sending signal. PID: 27503 SIG: 9
my GCM service class public class GCMIntentService extends GCMBaseIntentService {
private static final String TAG = "GCMIntentService";
private static final int NOTIFICATION_ID = 001;
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 with GCM");
Log.d("PASS", RegisterActivity.password);
ServerUtilities.register(context, RegisterActivity.password, RegisterActivity.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 a new message
* */
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
//String message = intent.getExtras().getString("message");
CharSequence[] message1 = intent.getCharSequenceArrayExtra("message");
String message = " A V A K O O";//intent.getExtras().getString("message");
displayMessage(context, message);
// notifies user
generateNotification(context, message);
}
/**
* Method called on receiving a 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 a notification to inform the user that server has sent a 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 = message;
Intent notificationIntent = new Intent(context, MyNotification.class);
/* Intent waIntent = new Intent(Intent.ACTION_SEND);
waIntent.setType("text/plain");
waIntent.setPackage("com.whatsapp");
if (waIntent != null) {
notificationIntent.setData(Uri.parse("text"));
waIntent.setFlags(waIntent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(Intent.createChooser(waIntent, "Share with"));
} */
notificationIntent.setData(Uri.parse(message));
// set intent so it does not start a 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;
// Vibrate if vibrate is enabled
notification.defaults |= Notification.DEFAULT_VIBRATE;
notificationManager.notify(0, notification);
}
}
my display message function public static void displayMessage(Context context, String message) { Intent intent = new Intent(DISPLAY_MESSAGE_ACTION); intent.putExtra(EXTRA_MESSAGE, message); context.sendBroadcast(intent); }
You need to set this flag for your PendingIntent : PendingIntent.FLAG_CANCEL_CURRENT.
PendingIntent.getActivity(this, _ID,
navigationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Using this flag, your intent message will not be null on the receiver
链接地址: http://www.djcxy.com/p/67904.html下一篇: Android广播意图