单击通知时打开错误的活动
Posted
技术标签:
【中文标题】单击通知时打开错误的活动【英文标题】:Wrong Activity is getting openned on clicking Notification 【发布时间】:2019-09-04 00:03:23 【问题描述】:点击通知后,错误的 Activity 被打开 - 主应用程序 Activity,但不是我的目标 Activity - NearPhotoActivity。
创建通知:
public static Notification createNotification(Location location)
NotificationChannel mChannel = new NotificationChannel(
"3000", "notification_channel", NotificationManager.IMPORTANCE_LOW);
notificationManager.createNotificationChannel(mChannel);
return buildNotification("Notification Title",
"Notification Body",
true,
R.drawable.ic_mr_button_connecting_00_dark,
createPendingIntent(NearPhotoActivity.class, location),
mChannel);
创建 PendingIntent:
private static PendingIntent createPendingIntent(Class destinationActivityClass, Location location)
Intent intent = new Intent(MyApplication.getAppContext(),
destinationActivityClass);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("nearLocation", location);
return PendingIntent
.getActivity(MyApplication.getAppContext(),
0,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
应该打开的活动:
@RequiresApi(api = Build.VERSION_CODES.O)
public class NearPhotoActivity extends AppCompatActivity
private ImageView nearPhotoImageView;
private TextView locationDescriptionTextView;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_near_photo);
onNewIntent(getIntent());
nearPhotoImageView = findViewById(R.id.nearPhotoImageView);
locationDescriptionTextView = findViewById(R.id.locationDescriptionTextView);
@Override
protected void onNewIntent(Intent intent)
if(intent.getExtras().containsKey("nearLocation"))
Location location = (Location) intent.getExtras().getSerializable("nearLocation");
//Address address = MyAppUtils.getLocation(location.getLatitude(),location.getLongitude());
locationDescriptionTextView.setText("You are " + location.distanceTo(MyApplication.getCurrentLocation()) + " meters");
【问题讨论】:
【参考方案1】:打开了错误的活动,因为您在启动应用程序时在Mainfest
中将MainActivity
设置为默认值。
您应该在MainActivity
中添加onNewIntent
函数,而不是在NearPhotoActivity
中。
MainActivity
override fun onNewIntent(intent: Intent?)
super.onNewIntent(intent)
receiveIntent(intent)
fun receiveIntent(intent: Intent?)
Location location = (Location) intent.getExtras().getSerializable("nearLocation");
Intent i = newIntent(MainActivity.this,NearPhotoActivity.class)
i.putExtra("location",location)
startActivity(i)
然后使用getExtra
获取location
类中的location
。
【讨论】:
在我的 MainActivity 中处理 onNewIntent 没有任何意义,因为我需要在 NearPhotoActivity 中添加额外内容,因为位置从那里提供 TextView 组件。 我猜它会返回JSON
而不是位置对象?
不,它会返回有效的 Location 对象,现在一切正常。以上是关于单击通知时打开错误的活动的主要内容,如果未能解决你的问题,请参考以下文章