XAMARIN.FORMS:如果应用程序在Android中处于后台,则FCM推送通知不会振动

时间:2018-03-14 16:14:51

标签: android xamarin xamarin.forms xamarin.android

我使用的是Xamarin.Forms,但我在处理推送通知方面遇到了一些问题。 只有当app位于前台时,它们才能正常工作。

当应用程序处于后台时,所有通知都会被正确接收并显示,但我无法让它们振动甚至开启。我发现了很多文档,但它已经很老了,大多数时候,推荐的方法都被弃用了。

无论如何,我有 FirebaseMessagingService 来处理FCM事件,这是生成推送通知的操作:

    void SendNotification(RemoteMessage message)
    {
        var intent = new Intent(this, typeof(MainActivity));
        intent.AddFlags(ActivityFlags.ClearTop);

        intent.PutExtra("type", message.Data["type"]);

        var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);

        NotificationManager notificationManager = (NotificationManager)ApplicationContext.GetSystemService(NotificationService);
        NotificationCompat.Builder builder = null;

        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
        {
            var importance = NotificationImportance.Default;
            NotificationChannel notificationChannel = new NotificationChannel("ID", "Name", importance);
            notificationManager.CreateNotificationChannel(notificationChannel);
            builder = new NotificationCompat.Builder(ApplicationContext, notificationChannel.Id);
        }
        else
            builder = new NotificationCompat.Builder(ApplicationContext);

        builder = builder
            .SetSmallIcon(Resource.Drawable.icon)
            .SetDefaults((int)((int)NotificationDefaults.Sound | (int)NotificationDefaults.Vibrate))
            .SetAutoCancel(true)
            .SetContentTitle(message.GetNotification().Title)
            .SetContentText(message.GetNotification().Body)
            .SetContentIntent(pendingIntent)
            .SetLights(65536, 1000, 500)
            .SetVibrate(new long[] { 1000, 1000, 1000 })
            .SetPriority((int)NotificationPriority.High);

        PowerManager pm = (PowerManager)ApplicationContext.GetSystemService(PowerService);

        WakeLock wl = pm.NewWakeLock(WakeLockFlags.Partial, "TAG");

        wl.Acquire(15000);

        notificationManager.Notify(0, builder.Build());

        wl.Release();

    }

我还在Android.Manifest文件中添加了这些行:

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE"/>

之前非常简单,但我一直在尝试添加新功能,例如WAKE_LOCK部分或创建Builder对象时Android版本的区别。 仅当app位于前台时才会振动。

我甚至尝试使用James Montemagno的Vibrate插件或使用Android.Vibrator类,当应用程序处于后台时,他们也没有工作。

我愿意接受这里的建议。感谢。

2 个答案:

答案 0 :(得分:0)

在奥利奥(+)上,您必须通过EnableVibration(true)启用NotificationChannel channel; channel = notificationManager.GetNotificationChannel(myUrgentChannel); if (channel == null) { channel = new NotificationChannel(myUrgentChannel, channelName, NotificationImportance.High); channel.EnableVibration(true); channel.EnableLights(true); channel.SetSound( RingtoneManager.GetDefaultUri(RingtoneType.Notification), new AudioAttributes.Builder().SetUsage(AudioUsageKind.Notification).Build() ); channel.LockscreenVisibility = NotificationVisibility.Public; notificationManager.CreateNotificationChannel(channel); } channel.Dispose(); 上的振动。

奥利奥示例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


        <Button
            android:text="A"
            android:id="@+id/A"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:padding="10dip"
            android:layout_weight="1" />

        <Button
            android:text="B"
            android:id="@+id/B"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:padding="10dip"
            android:layout_weight="1" />


</LinearLayout>

答案 1 :(得分:0)

在一遍又一遍地检查所有内容后,我只需要将其添加到有效负载中。我不知道必须包括它才能让它振动。我无法以编程方式修改此行为,但我确信这是可能的。

   "notification":{
       "sound":"default"
    }

在此发现 Vibration on push-notification not working when phone locked/app not open