Я нажал кнопку «Домой», чтобы мое приложение перешло в фоновый режим, а затем другое устройство отправило уведомление, и мое устройство получило. Когда я щелкаю по уведомлению, чтобы закрыть его, начинается основное действие (экран входа в систему, а не приложение в фоновом режиме), и если я нажимаю кнопку sh назад, мое исходное приложение (фон) отображается, но вылетает, когда я нажимаю некоторые кнопки.
- Я пытался вызвать свое фоновое приложение, поэтому добавление флагов в намерениях было предложено в ответах переполнения стека, но не сработало. Попробовал singleTask в манифесте, но он не работал.
- , поэтому я подумал, что если вызвать фоновое приложение невозможно, тогда уведомление не будет работать. Я пытался отправить нулевое намерение или вообще не создавать намерение, но все равно показывал то же самое.
Надеюсь, у кого-нибудь есть ответ, как вызвать мое фоновое приложение при нажатии на уведомление.
Код уведомления:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData().size() > 0) {
Intent notificationIntent = new Intent(this, MainActivity.class);
//notificationIntent.putExtra("mUID",remoteMessage.getData().get("yourUID"));
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int notificationID = new Random().nextInt(3000);
/*
Apps targeting SDK 26 or above (Android O) must implement notification channels and add its notifications
to at least one of them. Therefore, confirm if version is Oreo or higher, then setup notification channel
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setupChannels(notificationManager);
}
PendingIntent pendingIntent = PendingIntent.getActivity(this , 0, null, PendingIntent.FLAG_UPDATE_CURRENT);
//PendingIntent.getActivity(context, 0, null, PendingIntent. FLAG_ONE_SHOT)
//n.flags |= Notification.FLAG_AUTO_CANCEL; // just like that teoRetik says
Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.logobig2);
Uri notificationSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, ADMIN_CHANNEL_ID)
.setSmallIcon(R.drawable.logobig2)
.setLargeIcon(largeIcon)
.setContentTitle(remoteMessage.getData().get("title"))
.setContentText(remoteMessage.getData().get("message"))
.setAutoCancel(true)
.setSound(notificationSoundUri)
.setPriority(Notification.PRIORITY_HIGH)
.setContentIntent(pendingIntent);
//Set notification color to match your app color template
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
notificationBuilder.setColor(getResources().getColor(R.color.colorPrimaryDark));
}
notificationManager.notify(notificationID, notificationBuilder.build());
}
else {
}
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void setupChannels (NotificationManager notificationManager){
CharSequence adminChannelName = "New notification";
String adminChannelDescription = "Device to devie notification";
NotificationChannel adminChannel;
adminChannel = new NotificationChannel(ADMIN_CHANNEL_ID, adminChannelName, NotificationManager.IMPORTANCE_HIGH);
adminChannel.setDescription(adminChannelDescription);
adminChannel.enableLights(true);
adminChannel.setLightColor(Color.BLUE);
adminChannel.enableVibration(true);
if (notificationManager != null) {
notificationManager.createNotificationChannel(adminChannel);
}
}
Это мой манифест
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testing.test">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<application
android:allowBackup="true"
android:icon="@drawable/logobig2"
android:label="@string/app_name"
android:roundIcon="@drawable/logobig2"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoginActivity" />
<activity android:name=".DashboardActivity"/>
<activity android:name=".RegisterActivity" />
<activity android:name=".MessageActivity" />
<activity android:name=".Details" />
<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>
</manifest>