处理状态栏通知

时间:2010-03-08 14:56:04

标签: android

在我的应用程序中启动后台服务并从该服务我想设置状态栏通知,该服务已启动以下是代码:

    Context context = getApplicationContext();
    String ns = Context.NOTIFICATION_SERVICE;
    int icon = R.drawable.icon;
    CharSequence tickerText = "Hello";
    long when = System.currentTimeMillis();
    Notification notification = new Notification(icon, tickerText, when);
    CharSequence contentTitle = "My notification";
    CharSequence contentText = "Hello World!";
    Intent notificationIntent = new Intent(MyService.this, MyClass.class);
    notificationIntent.setFlags(  Intent.FLAG_ACTIVITY_NEW_TASK);

    PendingIntent contentIntent = PendingIntent.getActivity(this,0,notificationIntent,0);

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
   NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
   mNotificationManager.notify(1, notification);

通知显示在状态栏中但是当我点击MyClass.class时没有被触发。并且在log cat中它显示 “输入管理器服务窗口已经集中忽略了焦点....”

所以plz提供解决方案。

提前致谢

2 个答案:

答案 0 :(得分:2)

我不确定你的意思是“MyClass.class没有被解雇”,但是如果它已经加载并且你期望再次调用onCreate,你可能会期待错误的结果。我正在做一些非常相似的事情并从通知触摸中获取代码以在我已经运行的Activity派生类上执行,我将PendingIntent.FLAG_UPDATE_CURRENT作为第4个参数传递给PendingIntent构造函数

PendingIntent contentIntent = PendingIntent.getActivity(YourService.this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

我将我的代码放在Activity的以下方法中执行:

@Override
public void onNewIntent(Intent intent)
{
    super.onNewIntent(intent);

    // your code here

}

答案 1 :(得分:1)

首先,不要使用getApplicationContext()。您的ServiceContext,“应用程序上下文”对于您需要Context的地方通常无用。

其次,我怀疑你需要FLAG_ACTIVITY_NEW_TASK

Here is a sample application显示Notifications的使用。