【问题标题】:Openning MainActivity from Notification in Android从 Android 的通知中打开 MainActivity
【发布时间】:2020-08-09 04:14:54
【问题描述】:

我想从通知中打开我的应用 Mainactivity,但不知道在哪里声明 builder.setContentIntent() 的意图 这是我使用的代码: ReminderBroadcast.java

public class ReminderBroadcast  extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent){
        
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "notifyme")
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle("Title for Notification")
                .setContentText("This notification is Working")
                .setPriority(NotificationCompat.PRIORITY_HIGH);
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.notify(200, builder.build());
    }
}

MainActivity.java


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        createNotificationChannel();
        
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "Reminder set", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this, ReminderBroadcast.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0,intent,0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                long timeAtClick = System.currentTimeMillis();
                long fiveSeconds = 5 * 1000;
                alarmManager.set(AlarmManager.RTC_WAKEUP,
                        timeAtClick + fiveSeconds, pendingIntent);
            }
        });
    }
    private void createNotificationChannel(){
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){
            CharSequence name = "ReminderChannel";
            String description = "This is used for channel";
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel channel = new NotificationChannel("notifyme" , name , importance);
            channel.setDescription(description);
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }
    }
}

【问题讨论】:

    标签: android push-notification notifications android-notifications


    【解决方案1】:

    你必须使用PendingIntent

     Intent activityIntent = new Intent(getApplicationContext(), MainActivity.class);
     PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
     NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "MyNotification")
                .setContentTitle(title)
                .setSmallIcon(R.drawable.noti)
                .setAutoCancel(true)
                .setContentIntent(pendingIntent)
                .setContentText(message);
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.notify(200, builder.build());
    

    【讨论】:

    • 几乎成功了!我必须添加 context.getApplicationContext 才能让它工作。另一件事是单击时通知没有被删除。
    • 您不需要使用context.getApplicationContext() - context 可以构建PendingIntent。如果您希望在单击通知时将其删除,听起来您正在寻找 setAutoCancel(true)
    • @ianhanniballake 谢谢。有效。我想我应该更多地了解上下文
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多