简体   繁体   English

FCM通知后如何在锁定屏幕上打开活动

[英]How to open an activity on the lock screen after FCM notification

How can I open an activity on the lock screen without the user having to click on it?如何在无需用户点击的情况下在锁定屏幕上打开活动? Like for example an alarm or a call.例如警报或呼叫。 In my code I can get the FCM notification and if the user clicks on the notification it is possible to open an activity, but I wanted the user not to have to click on it.在我的代码中,我可以获得 FCM 通知,如果用户单击通知,则可以打开一个活动,但我希望用户不必单击它。

FirebaseService.java FirebaseService.java

//--- Notificacao
    public void createNotificationChannel(){
        mNotifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);


        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){

            //create a notification channel
            NotificationChannel notificationChannel = new NotificationChannel(PRIMARY_CHANNEL_ID,
                    "Mascot Notification", NotificationManager
                    .IMPORTANCE_HIGH);

            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.RED);
            notificationChannel.enableVibration(true);
            notificationChannel.setDescription("Notification from Mascot");

            mNotifyManager.createNotificationChannel(notificationChannel);

        }

    }

    public void sendNotification(String taskName){

        NotificationCompat.Builder notifyBuilder = getNotificationBuilder(taskName);

        //agora temos que entregar a notificacao
        mNotifyManager.notify(NOTIFICATION_ID, notifyBuilder.build());

    }

    public NotificationCompat.Builder getNotificationBuilder(String taskName){

        Intent intent = new Intent(this, TesteActivity.class);
        PendingIntent p = getPendingIntent(NOTIFICATION_ID, intent, getApplicationContext());

        return new NotificationCompat.Builder(this, PRIMARY_CHANNEL_ID)
                .setSmallIcon(R.drawable.notification_icon)
                .setContentText("titulo teste")
                .setContentIntent(p)
                .setCategory(NotificationCompat.CATEGORY_ALARM)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC);

    }

    private PendingIntent getPendingIntent(int id, Intent intent, Context context){
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addParentStack(intent.getComponent());
        stackBuilder.addNextIntent(intent);

        PendingIntent p = stackBuilder.getPendingIntent(id, PendingIntent.FLAG_UPDATE_CURRENT);
        return p;
    }

TesteActivity.java TesteActivity.java

public class TesteActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_teste);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
            setTurnScreenOn(true);
            setShowWhenLocked(true);
            KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
            keyguardManager.requestDismissKeyguard(this, null);

        }

instead of mNotifyManager.notify( call, which shows your Notification , just use startActivity(.. ? you may need also WakeLock and showOnLockScreen attribute set for this Activity in manifest而不是mNotifyManager.notify(调用,它显示您的Notification ,只需使用startActivity(.. ?您可能还需要在清单中为此Activity设置WakeLockshowOnLockScreen属性

edit: and HERE you can find article with exactly your case tutorial编辑:在这里您可以找到与您的案例教程完全相同的文章

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM