无法获取从 BroadcastReceiver 发送的意图

Unable to get intent sent from a BroadcastReceiver

我有一个 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 class 中接收意图的方式 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);

        }

    }

}

问题是我正在D/null: INTENT!!注销并且无法接收意图。

请帮助我为什么会这样以及如何获得意图?

why is this happening

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

Intent intent = new Intent();

然后您尝试在那个全新的 Intent 对象上寻找额外的东西:

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

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

how to get the intent?

要获取用于创建 activity 的 Intent,请调用 getIntent()

您应该在 BroadcastReceiver 中使用 getApplicationContext() 来创建 Intent 。

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 Class 或 Adapter 中,则分别对 fragment 和 [=17 使用 getActvity().getIntent()((Activity)context).getIntent() =].