无法获取从 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()
=].
我有一个 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()
=].