通知服务额外点击通知点击,怎么样?

时间:2013-01-20 23:27:19

标签: android android-intent service android-service android-notifications

我有一个带有通知的服务,我希望在用户点击通知时打开额外的新意图,所以当MainActivity打开时我可以获得额外的通知。我尝试过不同的方法,但我找不到如何让它发挥作用。

以下是我的尝试:

这是MyService

Intent intent = new Intent(MyService.this, MainActivity.class);
                    intent.putExtra("EXTRA", StringTEST);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    PendingIntent contentIntent = PendingIntent
                        .getActivity(getApplicationContext(),
                                     0, intent, 0);

这打开活动很好,但我不能得到额外的?这就是我试图获得它的方式:

MainActivity

@Override
public void onNewIntent(Intent intent){
    Bundle extras = intent.getExtras();
    if(extras != null){
        String name = extras.getString("EXTRA");
        System.out.println(name);
    }
}

@Override
protected void onResume() {
    Bundle extras = getIntent().getExtras();
    System.out.println(extras+"");
    if (extras != null) {
        try {
            onNewIntent(getIntent());
            Intent i = getIntent();
            String name = i.getStringExtra("EXTRA");
            System.out.println(name);
            currentDir = new File(name);

            changeFiles();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    super.onResume();
}

这是我试过的两种方式,但我仍然无效......我做错了什么?

由于

2 个答案:

答案 0 :(得分:27)

我猜你的问题就在这里:

PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(),
                           0, intent, 0);

您正在将intent传递给getActivity()并希望您将获得与PendingIntent匹配的Intent并包含您的额外内容。不幸的是,如果系统中已经出现PendingIntentIntent匹配(考虑到您的Intent个额外内容),那么{{1} }会返回getActivity()代替。

要查看这是否是问题,请尝试以下方法:

PendingIntent

这表示如果已经有一个PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 与系统中某处的PendingIntent相匹配,则应该使用Intent参数中的内容替换附加内容。

答案 1 :(得分:2)

我遇到了同样的问题。您使用了getIntent().getExtras(),但您应该使用getIntent().getStringExtra(id)。 它也在这里提到:Android: intent.putExtra in a Service Class to get notifications

根据您在评论中提到的静态变量,我们认为这不是一个好习惯,我建议避免使用静态变量。