我要做的是通过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);
}
}
}
答案 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中的附加内容。