Android Wear Intent Extras Empty

时间:2014-12-01 11:21:13

标签: android android-intent android-notifications android-pendingintent wear-os

我要做的是通过PendingIntent发送一个Notification to Wear来打开一个简单的Activity,其中TextView由Intents Extra(String)设置。问题是,Extras似乎是空的。

这是我的MainActivity代码:

public class MainActivity extends ActionBarActivity {

    public static final String KEY = "eu.paliga.creatinganotification.Key";
    public static final String MSG = "welcome back";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent viewIntent = new Intent(MainActivity.this, ViewEventActivity.class);
                viewIntent.putExtra(KEY, MSG);

                PendingIntent viewPendingIntent = PendingIntent.getActivity(MainActivity.this, 0, viewIntent, 0);

                NotificationCompat.Builder notificationBuilder =
                        new NotificationCompat.Builder(MainActivity.this)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("trying")
                        .setContentText("to figure it out")
                        .setContentIntent(viewPendingIntent);

                 NotificationManagerCompat notificationManager =
                        NotificationManagerCompat.from(MainActivity.this);

                notificationManager.notify(0, notificationBuilder.build());
            }
        });
    }
....
}

以及Intent启动的Activity:

public class ViewEventActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_viewintent);
    Intent intent = getIntent();
    if (intent.hasExtra(MainActivity.KEY)) {
        String msg = intent.getStringExtra(MainActivity.KEY);
        Log.d("MyTag", msg);
        ((TextView)findViewById(R.id.textView2)).setText(msg);
    }
}
}

1 个答案:

答案 0 :(得分:4)

当您使用PendingIntent.getActivity(MainActivity.this, 0, viewIntent, 0)(具体而言,0作为最后一个参数)时,不会根据PendingIntent overview替换额外内容:

  

由于这种行为,为了检索PendingIntent,重要的是要知道两个Intent何时被认为是相同的。人们常犯的一个错误就是使用Intent创建多个PendingIntent对象,这些Intent只在其" extra"内容,期望每次获得不同的PendingIntent。这不会发生。用于匹配的Intent部分与Intent.filterEquals定义的部分相同。如果你使用两个相当于Intent.filterEquals的Intent对象,那么你将获得两个相同的PendingIntent。

他们会详细介绍如何处理这些问题,但最常见的解决方案是用以下内容替换您的电话:

PendingIntent.getActivity(MainActivity.this, 0, viewIntent,
    PendingIntent.FLAG_UPDATE_CURRENT)

其中FLAG_UPDATE_CURRENT表示系统应更新PendingIntent中的附加内容。