Я хочу создать сервис, который будет работать в фоновом режиме и получать уведомления о пожаре - PullRequest
0 голосов
/ 14 октября 2018

Я новичок в Stackoverflow и в настоящее время работаю над приложением, которое обрабатывает входящие уведомления от пожарной базы и открывает мое приложение.Как я искал решение.Цель состоит в том, чтобы получать уведомления, даже если приложение находится в фоновом режиме и экран выключен (телефон заблокирован).Или даже мое приложение убито, но я хочу, чтобы приложение получало уведомление, например, WhatsApp.В WhatsApp все уведомления получают, даже если телефон заблокирован или приложение убито, я хочу сделать то же самое, но я новичок в разработке для Android, поэтому я не могу понять, как это сделать.

Когда мое приложение находится на переднем плане, все уведомленияраспознаются Получателем.Даже когда приложение работает в фоновом режиме, но мой телефон все еще включен, я могу получать эти сообщения.Здесь происходят странные вещи:

Приложение находится на переднем плане, и я выключаю экран -> уведомления распознаются.Приложение работает в фоновом режиме, и я выключаю экран -> уведомления не распознаются.

Большая странная вещь - моя цель, достигнутая на моем старом мобильном телефоне micromax Unite 3.В этом мобильном телефоне я получаю уведомление, даже если мой фон или фон был убит, но в моем redmi note 3 уведомление о прекращении работы приложения не распознано.

Я хочу решить эту проблему.Я хочу, чтобы мое уведомление распознавалось, даже если приложение на переднем плане, в фоновом режиме или убито во всех версиях операционной системы и мобильных телефонах.

Я использую простой метод onMessageReceived () кода службы firebase ниже

    public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

    if(remoteMessage.getData()!=null)
            sendNotification(remoteMessage);
}

private void sendNotification(RemoteMessage remoteMessage) {
    Map<String,String> data=remoteMessage.getData();
    String title=data.get("title");
    String content=data.get("content");

    NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    String NOTIFICATION_CHANNEL_ID="Gov_Job";

    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O)
    {
        //Only active for Android o and higher because it need Notification Channel
        @SuppressLint("WrongConstant") NotificationChannel notificationChannel=new NotificationChannel(NOTIFICATION_CHANNEL_ID,
                "GovJob Notification",
                NotificationManager.IMPORTANCE_MAX);

        notificationChannel.setDescription("GovJob channel for app test FCM");
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.setVibrationPattern(new long[]{0,1000,500,1000});
        notificationChannel.enableVibration(true);

        notificationManager.createNotificationChannel(notificationChannel);

    }

    NotificationCompat.Builder notificationBuilder=new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);

    notificationBuilder.setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            //.setSmallIcon(android.support.v4.R.drawable.notification_icon_background)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setTicker("Hearty365")
            .setContentTitle(title)
            .setContentText(content)
            .setContentInfo("info");

    notificationManager.notify(1,notificationBuilder.build());




}   

Ответы [ 2 ]

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

В Firebase это известно как Firebase Cloud Messaging.В этом случае сначала я подключаю свои приложения с помощью Firebase.Затем я реализовал firebase-сообщения в моем build.gradle (module-app) implementation 'com.google.firebase:firebase-messaging:11.8.0'.

Затем я создаю этот класс, который расширяет FirebaseInstanceIdService.Поскольку Firebase предоставляет индивидуальный идентификатор для отдельных приложений.

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

String REG_TOKEN = "REG_TOKEN";

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(REG_TOKEN,"Token   " +refreshedToken);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.


}

}

Затем я создаю другой класс, который расширяет FirebaseMessagingService.. `public class MyFirebaseMessagingService extends FirebaseMessagingService {

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Intent intent=new Intent(this,MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent=PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
    NotificationCompat.Builder notificationbuilder= new NotificationCompat.Builder(this);
    notificationbuilder.setContentTitle("FOR NOTIFICATION");
    notificationbuilder.setContentText(remoteMessage.getNotification().getBody());
    notificationbuilder.setAutoCancel(true);
    notificationbuilder.setSmallIcon(R.mipmap.ic_launcher);
    notificationbuilder.setContentIntent(pendingIntent);
    NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0,notificationbuilder.build());

}

}

введите код здесь

После всего я отправляю сообщение с консоли firbase.который получен моим телефоном в качестве уведомления.

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

Для получения этой возможности я использую BroadcastReceiver и службу уведомлений Android `

package com.alarmmanager_demo;

import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

import static android.support.v4.content.WakefulBroadcastReceiver.startWakefulService;

/**
 * Created by sonu on 09/04/17.
 */

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "ALARM!! ALARM!!", Toast.LENGTH_SHORT).show();

        //Stop sound service to play sound for alarm
        context.startService(new Intent(context, AlarmSoundService.class));

        //This will send a notification message and show notification in notification tray
        ComponentName comp = new ComponentName(context.getPackageName(),
                AlarmNotificationService.class.getName());
        startWakefulService(context, (intent.setComponent(comp)));

    }


}
`
...