2017-10-17 124 views
-1

我正在做一個拼車應用程序。爲了讓乘客進入車內,我會讓司機在他/她想要開始乘車時向乘客發送通知。之後,當車手點擊通知時,在SharedPreferences中更改布爾值,並開始騎行。但是,當騎手打開應用程序時,如果沒有點擊任何通知,它就不會發生,因爲我沒有做任何改變它的事情是合理的。這就是爲什麼我想每次用戶打開應用程序時都要檢查通知的原因,但我不知道如何去做。在應用程序打開時檢查通知中的消息

我一般的聽衆↓

public class FcmMessagingService extends FirebaseMessagingService { 
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    if (remoteMessage.getData().size() > 0) { 
     JSONObject json = new JSONObject(remoteMessage.getData()); 
     try { 
      sendNotification(json.getString("message").split("Message data payload: ")[0]); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

@Override 
public void handleIntent(Intent intent) { 
    super.handleIntent(intent); 
    String msg = intent.getExtras().get("message").toString(); 
    System.out.println("Guia: " + msg); 
    if (msg.contains("IniciarCaronaAgora")) { 
     PreferenceManager.getDefaultSharedPreferences(this).edit().putString("emCarona", "true").apply(); 
     PreferenceManager.getDefaultSharedPreferences(this).edit().putString("emCaronacid", msg.split("IniciarCaronaAgora cid:")[0]).apply(); 
    } 
} 

private void sendNotification(String message) { 
    Intent intent = new Intent(this, ListaCaronasFragment.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.putExtra("fromNotification", true); 
    intent.putExtra("message", message); 
    startActivity(intent); 
} 

如果有人收到通知和應用程序沒有打開,一般的聽衆將工作和我不會。這就是爲什麼我在主要活動中有一小部分代碼,如果有任何意圖,就會打開一個警告框。 ↓

if (getIntent().getExtras()!= null){ 
     String message = getIntent().getExtras().get("message").toString(); 
     AlertDialog ad = new AlertDialog.Builder(ListaCaronasFragment.this).create(); 
     if (message.contains("IniciarCaronaAgora")) { 
      PreferenceManager.getDefaultSharedPreferences(this).edit().putString("emCarona", "true").apply(); 
      PreferenceManager.getDefaultSharedPreferences(this).edit().putString("emCaronacid", message.split("IniciarCaronaAgora cid:")[0]).apply(); 
     } 
     ad.setTitle("Aviso"); 
     ad.setMessage(message); 
     ad.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 
     ad.show(); 
    } 
+0

在backgtound的應用程序中,你無法管理通知? –

+0

我用它的標準方式。它通常顯示應用程序圖標和應用程序名稱。我只是控制向用戶顯示消息。換句話說,我不能控制,直到現在,我沒有理由。 –

+0

像往常一樣的答案是:你發送了一個錯誤的通知類型(問很多很多次,像* onMessageReceived不叫*) – Selvin

回答

0

做了我的研究,我得出結論,很少有人試圖做我想做的事。這不是關於做無用的調用或發送錯誤類型的通知,而是沒有人執行併發布給開發人員。因此,我決定使用我的數據庫來做到這一點,而不是通過通知(將某人放在一邊)來做到這一點,這保證了數據的持久性和可靠性。

相關問題