Android Причина касания уведомления приводит к сбою приложения из-за намерения действия - PullRequest
0 голосов
/ 05 августа 2020

У меня есть MainActivity и UserAcitivity, я передал некоторые значения UserActivity через намерение. из UserActivity, я вызываю уведомление, затем появляется уведомление, я сделал нажатие на уведомление, чтобы запустить UserActivity с помощью ожидающего намерения. При нажатии на уведомление приложение вылетает, потому что значения, переданные из MainAcitvity, становятся нулевыми. Я не могу использовать SharedPreferences, потому что конфликт значений для другого UserAcitivity (переданное значение было уникальным для каждого пользователя)

пример кода находится здесь: - Это MainAcitvity

public void buttonClick(View view){
    Intent intent = new Intent(this,SecondActivity.class);
    intent.putExtra("myname","ashiqueHira");
    startActivity(intent);
}

Это это метод SecondActivity Oncreate;

String heading= "";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    Intent intent = getIntent();
    heading = intent.getStringExtra("myname");
    Toast.makeText(this, heading, Toast.LENGTH_SHORT).show();
}

Это мой метод уведомления

public void notificationPops(){

    Intent intent = new Intent(this, SecondActivity.class);
    createNotificationChannel();
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addNextIntentWithParentStack(intent);
    Vibrator vibrator = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_vibration_black_24dp)
            .setContentTitle("Token Reminder")
            .setContentText("Dismiss the Alarm by Clicking this")
            .setPriority(NotificationCompat.PRIORITY_MAX)
            .setVibrate(new long[] { 100, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000 })
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            // Set the intent that will fire when the user taps the notification
            .setContentIntent(pendingIntent)
            .setAutoCancel(true);
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(0, builder.build());
}

private void createNotificationChannel() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel serviceChannel = new NotificationChannel(
                CHANNEL_ID,
                "myChannel",
                NotificationManager.IMPORTANCE_HIGH
        );
        serviceChannel.enableVibration(true);
        NotificationManager manager = getSystemService(NotificationManager.class);
        manager.createNotificationChannel(serviceChannel);
    }
}

Это аналогичное состояние, которое есть у меня. Разница в том, что у меня много случаев использования значения getIntent, и это значение уникально для каждого Activity. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Итак, в основном вы получаете NullPointerException. Чтобы уменьшить эту проблему, измените код SecondActivity следующим образом:

String heading= "";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    Intent intent = getIntent();
    if(intent.getStringExtra("myname")!= null){
       heading = intent.getStringExtra("myname");
       Toast.makeText(this, heading, Toast.LENGTH_SHORT).show();
    }
}

Это уменьшит вашу ошибку nullException, и ваше приложение не сможет взломать sh.

Другое дело Если вам всегда нужен заголовок значение проходит через намерение. Затем передайте значение также из уведомления pendingIntent и получите его из SecondActivity

0 голосов
/ 05 августа 2020

Я нашел способ решить эту проблему, добавив и заменив следующий код в методе notificationPops ()

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("yourName",heading);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, 
intent, PendingIntent.FLAG_UPDATE_CURRENT);

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

Сообщите, пожалуйста, о других передовых методах решения указанной выше проблемы

...