无法从BroadcastReceiver发送意图

时间:2017-02-22 12:25:05

标签: java android android-intent broadcastreceiver android-viewholder

我有Service查找数据库中的更改,然后根据某些因素通知用户。其中一个notification有一个操作按钮,点击其中BroadcastReceiver被触发并Activity.class被打开。

以下是:

public class MyBroadcastReceiver extends BroadcastReceiver {

        public MyBroadcastReceiver(){
            super();
        }

        @Override 
        public void onReceive(final Context context, Intent intent) {

             if (intent.getAction() != null && intent.getAction().equals(getString(R.string.broadcast_id_for_rating))) {
                Intent resultIntent = new Intent(getBaseContext(), Activity.class);
                resultIntent.putExtra("abc", "abc");
                resultIntent.setType("text/plain");
                resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(resultIntent);
            } else {
                Toast.makeText(context, "Intent is null.", Toast.LENGTH_SHORT).show();
            }
        }
    }

以下是我尝试接收来自此ViewHolder的{​​{1}}课程的意图:

Activity.class

问题我已public class RModelClass extends AbstractItem<RModelClass, RModelClass.ViewHolder> { public RModelClass() {} @Override public int getType() { return R.id.recycler_view_r; } @Override public int getLayoutRes() { return R.layout.r_played; } @Override public void bindView(final RModelClass.ViewHolder holder, List payloads) { super.bindView(holder, payloads); String abc; Intent intent = new Intent(); if (intent.getExtras() != null) { openForRating = intent.getExtras().getString("abc"); if (abc != null) { Log.d("abc", "YO!!"); } else { Log.d("abc", "NO!!"); } } else { Log.d("null", "INTENT!!"); } } protected static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); } } } 注销但无法接收意图。

请帮助我为什么会发生这种情况以及如何获得意图?

2 个答案:

答案 0 :(得分:1)

您应该使用getApplicationContext()中的BroadcastReceiver来创建意图。

Intent resultIntent = new Intent(getApplicationContext(), Activity.class);
resultIntent.putExtra("abc", "abc");
resultIntent.setType("text/plain");
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(resultIntent);

你在这一行也犯了错误

Intent intent = new Intent();

这是新的intent对象,您正在尝试从此Intent对象获取值。

您必须从您的Android组件获取Intent,例如getIntent()

如果您在Fragment班级或Adapter,则分别使用getActvity().getIntent()((Activity)context).getIntent() fragmentAdapter

答案 1 :(得分:0)

  

为什么会发生这种情况

您创建了一个全新的Intent对象:

Intent intent = new Intent();

然后你尝试在这个全新的Intent对象上寻找额外内容:

if (intent.getExtras() != null) {

Intent对象是全新的。它不会有任何额外的东西。

  

如何获得意图?

要获取用于创建活动的Intent,请致电getIntent()