7

好吧,我有一个运行通知的服务,我想在用户单击通知时打开一个新的意图,所以当MainActivity打开时我可以得到额外的。我尝试了不同的方法,但我只是不知道如何让它工作。

这是我尝试过的:

这是我的服务

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);

这可以很好地打开活动,但我无法获得额外的?这就是我试图得到它的方式:

主要活动

@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();
}

这是我尝试过的两种方法,但我仍然为空......我做错了什么?

谢谢

4

2 回答 2

31

我猜你的问题在这里:

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

您正在传递intentgetActivity()期望您将获得PendingIntent与您的匹配Intent并包括您的附加功能。不幸的是,如果PendingIntent系统中已经有一个与您匹配的浮动对象Intent考虑您的Intent额外内容)getActivity(),那么它将返回给您PendingIntent

要查看这是否是问题所在,请尝试以下操作:

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

这表示如果系统中已经有一个PendingIntent与您的某个位置匹配的,它应该用您的参数Intent中的那些替换额外的。intent

于 2013-01-21T09:43:12.467 回答
3

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

此外,正如您在评论中提到的那样,使用静态变量被认为不是一个好习惯,我建议您避免使用它。

于 2014-09-14T01:10:03.603 回答