2017-03-20 7 views
0

Ich versuche eine SQLite-Datenbank zu aktualisieren, die eine Benachrichtigung von Firebase empfängt. Es funktioniert, wenn das Telefon wach ist (Bildschirm sperren oder entsperren).SQLite-Datenbank aktualisieren, wenn das Telefon schläft

Wenn das Telefon schläft, erhält das Telefon die Benachrichtigungen, aber die Datenbank wird nicht aktualisiert.

Wie aktualisiere ich meine Datenbank (Ich möchte nicht wirklich Firebase-Datenbank verwenden)?

public class MyFcmListenerService extends FirebaseMessagingService { 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 

     Long lUserId = Long.parseLong(values.get("from_user")); 
     Long lPopId = Long.parseLong(values.get("msg_id")); 
     String lText = values.get("text"); 

     Intent service = new Intent(this, DatabaseUpdateService.class); 
     service.putExtra("user", lUserId); 
     service.putExtra("msg_id", lPopId); 
     service.putExtra("text", lText); 

     sendNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody(), service); 
    } 

    private void sendNotification(String mMessageTitle, String messageBody, Intent service) { 
     Intent intent = new Intent(this, ShowConversationActivity.class); 

     Bundle lExtra = service.getExtras(); 
     intent.putExtras(lExtra); 
     intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,PendingIntent.FLAG_ONE_SHOT); 

     String lTitle = getResources().getString(R.string.message_from) + " " + mMessageTitle; 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     android.support.v4.app.NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.brand_icon) 
       .setContentTitle(lTitle) 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

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

     // Start the service, keeping the device awake while it is launching. 
     Log.d("DatabaseUpdateReceiver", "Starting service @ " + SystemClock.elapsedRealtime()); 
     startWakefulService(this, service); 
    } 
} 

public class DatabaseUpdateService extends IntentService { 
    private long mUserId; 
    private Intent mIntent; 

    public DatabaseUpdateService() { 
     super("DatabaseUpdateService"); 
    } 

    @Override 
    protected void onHandleIntent(@Nullable Intent intent) { 

     mIntent = intent; 

     ConversationAdapter lConversationAdapter = new ConversationAdapter(); 

     Bundle lExtras = intent.getExtras(); 
     long lPopId = lExtras.getLong("user"); 
     mUserId = lExtras.getLong("msg_id"); 
     String lText = lExtras.getString("text"); 

     Log.d(getClass().getName(), "--------------- > " + lText); 
     lConversationAdapter.insertMessage(lPopId, mUserId, lText, (long) 0); 
    } 
} 

public ConversationAdapter() { 
    mDatabase = DataBaseOpenHelper.getInstance().getDatabase(); 
} 

Vielen Dank für Ihre freundliche Hilfe.

Antwort

0

1: Überprüfen Sie, ob Sie WAKE_LOCK Erlaubnis zur Verfügung gestellt haben

2: ConversationAdapter Konstruktor sieht seltsam, kein Kontext zu schaffen?

+0

Ja, ich habe WAKE_LOCK Erlaubnis erteilt. Ich habe meine Frage bearbeitet, um sie mit dem ConversionAdapter-Konstruktor zu aktualisieren. – Piwi

Verwandte Themen