android - Android - 从通知重定向主要活动中的片段
问题描述
我有一个带有多个片段的 loginActivity 和 MainActivity,其中一个称为 NotificationFragment。
要求:假设用户已经登录并且当前在 Home Fragment 上(在 Main Activity 内)并且应用程序在后台。现在他们收到推送通知,用户应该被重定向到通知片段(在主活动上)。
截至目前,登录活动正在接收来自通知的意图数据。登录活动是我们目前的启动活动。
问题:Login Activity(在后台)应该如何通知 Main Activity 将用户从 Home Fragment 重定向到 Notification Fragment?
清单看起来像这样:
<activity
android:name="com.X.LoginActivity"
android:configChanges="orientation"
android:icon="@mipmap/ic_launcher"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<!-- Sets the intent action to view the activity -->
<action android:name="android.intent.action.VIEW" />
<!-- Allows the link to be opened from a web browser -->
<category android:name="android.intent.category.BROWSABLE" />
<!-- Allows the deep link to be used without specifying the app name -->
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.X.MainActivity"
android:configChanges="orientation"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustPan" />
解决方案
尝试这个
private void sendMyNotification(String title,String message) {
//On click of notification it redirect to this Activity
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Uri soundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Bitmap icon = BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_appicon);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this,"Default")
.setSmallIcon(R.drawable.ic_noti_new)
.setLargeIcon(icon)
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setSound(soundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
它将触发主要活动。
添加
android:launchMode="singleTask" 在你的 mainactivity 中避免运行 MainActivity 的多个实例。
<activity
android:name=".MainActivity"
android:launchMode="singleTask" />
推荐阅读
- macos - 通过键盘快捷键运行 rsync 的权限问题
- spring-boot - 春季 JPA。如何使用@Query 仅获取 ID 列表
- sql - NoSQL 数据库的工作方式与其中包含序列化对象的 SQL 表不同吗?
- cmake - 在 FreeBSD 12 和 Debian 10 上编译 c2ffi 的困难
- flutter - flutter_webview 无法显示具有三个.js 渲染的网页
- c# - 带有 System.Data.SqlClient 的 PlatformNotSupportedException
- c# - C# XML Serializer 无法反序列化摄氏度符号
- javascript - javascript生成的代码不起作用
- python - 使用 python 解析文件 - 熊猫
- python - 如何从 .csv 文件中解析出数据框。其中包含使用 Python 的标题详细信息行