Android 应用程序未运行时,onReceive函数的上下文无法正常工作
我正在开发一个显示推送通知消息的应用程序。当我尝试使用Toast消息显示消息时,它在任何情况下都能正常工作。但是我想对这些推送通知使用Android 应用程序未运行时,onReceive函数的上下文无法正常工作,android,push-notification,android-context,android-c2dm,Android,Push Notification,Android Context,Android C2dm,我正在开发一个显示推送通知消息的应用程序。当我尝试使用Toast消息显示消息时,它在任何情况下都能正常工作。但是我想对这些推送通知使用StatusBarNotifications。当应用程序运行时,它工作正常。如果在关机后重新启动设备,则不会显示状态栏通知。当应用程序被强制关闭时,情况也是如此 我如何解决这个问题 代码如下: public void onReceive(Context context, Intent intent) { if (intent.getAction().equa
StatusBarNotifications
。当应用程序运行时,它工作正常。如果在关机后重新启动设备,则不会显示状态栏通知。当应用程序被强制关闭时,情况也是如此
我如何解决这个问题
代码如下:
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE"))
{
handleMessage(context, intent);
}
}
private void handleMessage(Context context, Intent intent)
{
String message= intent.getStringExtra("msg");
Toast.makeText(context.getApplicationContext(),"\n message : "+message,1).show();
NotificationManager objNotfManager=(NotificationManager) context.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.logo;
CharSequence tickerMessage = message;
long when= System.currentTimeMillis();
Notification objNotf = new Notification(icon,tickerMessage,when);
CharSequence title = "New message from "+message;
CharSequence mesage = "You have "+number+" unread messages";
Intent NotifIntent = new Intent( context.getApplicationContext(),TabContainer.class);
NotifIntent.putExtra("message",message);
PendingIntent contentIntent = PendingIntent.getActivity( context.getApplicationContext(), 0, NotifIntent, 0);
objNotf.setLatestEventInfo( context.getApplicationContext(), title, mesage, contentIntent);
objNotfManager.notify(1,objNotf);
}
以前我使用的是上下文,但它不适用于其他小部件,也不适用于Toast。所以我计划使用
context.getApplicationContext()
TL;DR:使用getBaseContext()
而不是getApplicationContext()
(半)详细答覆:
我找到了你问题的答案,因为我今天也遇到了同样的问题。
问题在于,当您的应用程序在重新启动后被强制关闭,并且不在任务管理器中时,getApplicationContext()
没有正确初始化。在尝试检索通知管理器以生成通知时,使用它将给您错误的引用
传递给handleMessage方法的上下文也很可能由getApplicationContext()
给出
当应用程序处于非活动状态时,可以使用getBaseContext()
我建议通过这些方法尽可能追溯到接收推送通知意图的位置,并更改传递给handleMessage方法的任何Context
,并将其替换为Context=getBaseContext()
然后可以在方法中使用上下文参数。请参阅