Уведомление Android может открыть приложение дважды (или даже больше) - PullRequest
0 голосов
/ 04 октября 2018

Мое приложение устанавливает уведомление со следующим кодом:

private void defineAndLaunchNotification(String apppack,String title, String ContentText)
    {
Context context = getApplicationContext();
PackageManager pm = context.getPackageManager();
Intent LaunchIntent = null;
String name=null;

try {
    if (pm != null)
    {

        ApplicationInfo app = context.getPackageManager().getApplicationInfo(apppack, 0);
        name = (String) pm.getApplicationLabel(app);
        LaunchIntent = pm.getLaunchIntentForPackage(apppack);
    }
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();

}

Intent intent = LaunchIntent; 

if (ContentText.equals("filesystemfullnotification"))
{
    intent.putExtra("start", "fullsystem");
}
else
{
    intent.putExtra("start","incorrecttime");
}

PendingIntent pIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0);


NotificationCompat.Builder builder=null;
NotificationChannel notificationChannel=null;
int NOTIFICATION_ID = 12345;
if (Build.VERSION.SDK_INT<26) {
    builder =
            new NotificationCompat.Builder(getBaseContext())
                    .setSmallIcon(R.drawable.notification_icon)
                    .setAutoCancel(true)

                    .setContentTitle("title
)


 .setContentText("Content Text");


}
else
{
    int importance=NotificationManager.IMPORTANCE_HIGH;
    notificationChannel=new NotificationChannel("mychannel", "channel", importance);

    builder =
            new NotificationCompat.Builder(getBaseContext(),"mychannel")
                    .setSmallIcon(R.drawable.notification_icon)
                    .setAutoCancel(true)
                    //.setStyle(new NotificationCompat.BigTextStyle().bigText(StaticMethods.giveStringAccordingtoLanguage(title,language)))
                    .setContentTitle(StaticMethods.giveStringAccordingtoLanguage(title, language))
                    .setContentText(StaticMethods.giveStringAccordingtoLanguage(ContentText, language));



}

builder.addAction(R.drawable.notification_icon, "OK", pIntent);


Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(alarmSound);
builder.setVibrate(new long[]{0, 1000, 1000, 1000, 1000});


builder.setContentIntent(pIntent);


NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT>=26) {
    nManager.createNotificationChannel(notificationChannel);
}

nManager.notify( (int) ((new Date().getTime() +Math.round(Math.random()*5000) / 1000L) % Integer.MAX_VALUE), builder.build());
}

Этот код успешно отображает уведомление при каждом вызове, но проблема заключается в том, что, если уведомление нажимается дважды (или более) раз, оно открываетсястолько раз, сколько моего приложения, сколько раз.

Это происходит, даже если я определил в своем AndroidManifest.xml тег моего приложения с помощью android: launchMode = "singleInstance" .

Что я мог сделать, чтобы notificacion просто реагировал на первое нажатие или появился только один экземпляр приложения?

1 Ответ

0 голосов
/ 04 октября 2018

Проблема может заключаться в том, как вы создали намерение, которое передали в ожидающее намерение.Рассмотрите возможность создания своего намерения следующим образом:

    Intent intent = new Intent(context.getApplicationContext(), <Activity to launch>.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    intent.putExtra("start", "fullsystem");

По своему коду вы фактически вызываете для запуска всего приложения, поэтому создается несколько экземпляров приложения.

Вы должнызапустить определенную часть вашего приложения, активность входа в ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...