【问题标题】:Android Wear Intent Extras EmptyAndroid Wear Intent Extras 空
【发布时间】:2014-12-01 11:21:12
【问题描述】:

我想要做的是发送一个带有 PendingIntent 的通知以打开一个简单的 Activity,其中 TextView 由 Intents Extra(字符串)设置。问题是,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);
    }
}
}

【问题讨论】:

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


    【解决方案1】:

    当您使用PendingIntent.getActivity(MainActivity.this, 0, viewIntent, 0)(特别是0 作为最后一个参数)时,不会根据PendingIntent overview 替换额外的:

    由于这种行为,重要的是要知道两个 Intent 何时被认为是相同的,以便检索 PendingIntent。人们犯的一个常见错误是创建多个 PendingIntent 对象,其 Intent 仅在其“额外”内容上有所不同,期望每次都获得不同的 PendingIntent。这不会发生。 Intent 中用于匹配的部分与Intent.filterEquals 定义的部分相同。如果您使用两个根据Intent.filterEquals 等效的 Intent 对象,那么您将获得相同的 PendingIntent 对象。

    他们详细介绍了如何处理它们,尽管最常见的解决方案是将您的电话替换为:

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

    FLAG_UPDATE_CURRENT 表示系统应该更新 PendingIntent 中的 extras。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 2014-11-16
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多