Нажмите уведомление, чтобы открыть новый mainActiviy. Есть в любом случае просто принести фоновое приложение? или сделать уведомление ничего не делает при нажатии? - PullRequest
0 голосов
/ 30 апреля 2020

Я нажал кнопку «Домой», чтобы мое приложение перешло в фоновый режим, а затем другое устройство отправило уведомление, и мое устройство получило. Когда я щелкаю по уведомлению, чтобы закрыть его, начинается основное действие (экран входа в систему, а не приложение в фоновом режиме), и если я нажимаю кнопку sh назад, мое исходное приложение (фон) отображается, но вылетает, когда я нажимаю некоторые кнопки.

  1. Я пытался вызвать свое фоновое приложение, поэтому добавление флагов в намерениях было предложено в ответах переполнения стека, но не сработало. Попробовал singleTask в манифесте, но он не работал.
  2. , поэтому я подумал, что если вызвать фоновое приложение невозможно, тогда уведомление не будет работать. Я пытался отправить нулевое намерение или вообще не создавать намерение, но все равно показывал то же самое.

Надеюсь, у кого-нибудь есть ответ, как вызвать мое фоновое приложение при нажатии на уведомление.

Код уведомления:

 @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>
...