2016-06-14 3 views
0

GCM通知をバックグラウンドで受信すると、通知がクリックされると自分のアプリにリンクされ、このGCM通知でデータバンドルを取得できます。クリックしてGCM通知オプションのデータを取得するにはどうすればいいですか?アプリがバックグラウンドのとき

しかし、それをクリックせずに通知でデータを取得する方法はありますか?通知が来たら、ユーザーは通知をクリックしないで、代わりにアプリをクリックしてアプリを直接開きます。現時点では、ユーザーがアプリを開いたときにすべての通知ペイロードを取得することは可能ですか?

+0

はい、することができます受信者は、あなたがenythingsを制御することができます。 – javadaskari

+0

私に例を挙げたり、詳細を教えてもらえますか?放送受信機でデータを取得するにはどうすればよいですか?アプリがバックグラウンドのときに通知を受信した場合私はアプリがフォアグラウンドにある場合、またはユーザーが通知をクリックしてアプリを開いた場合に取得できることを知っています。しかし、どうすればいいですか?ユーザがクリック通知なしでアプリを直接開いた場合はどうなりますか? –

+0

アプリをバックグラウンドで使用している場合、サーバーからの通知を受け取った場合、自動的にアプリをフォアグラウンドで表示しますか? –

答えて

0

あなたはGCMメッセージを受信すると、アンドロイドのアプリがバックグラウンドで動作している場合でも、あなたのBroadcastReceiverを呼び出す:

public class GCMBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, Intent intent) { 

     String action = intent.getAction(); 
     L.m("onReceive GCM called!"); 

     //Get your data 
     String id = intent.getStringExtra("id"); 
     String tickerText = intent.getStringExtra("tickerText"); 
     String title = intent.getStringExtra("title"); 
     String msg = intent.getStringExtra("message"); 
     String dateTime = intent.getStringExtra("datetime"); 

     //Here, You can save your data in SQLite 
     //For example: I need to save title, msg and dateTime 
     DBGcmMessages dbGcmMessages = new DBGcmMessages(context); 
     dbGcmMessages.insert(title, msg, dateTime); 

     //Then, you can show notification or show nothing!!! 
    } 
} 

をし、これがDBGcmMessagesコンテンツである:あなたの放送では、

public class DBGcmMessages extends SQLiteOpenHelper { 

    private Context mContext; 
    private SQLiteDatabase mDatabase; 

    private static final String DB_NAME = "gcm_message_db"; 
    private static final int DB_VERSION = 1; 

    private static final String TABLE = "login"; 
    private static final String COLUMN_ID = "_id"; 
    private static final String COLUMN_TITLE = "_title"; 
    private static final String COLUMN_TEXT = "_text"; 
    private static final String COLUMN_DATE_TIME = "_date_time"; 

    private static final String CREATE_TABLE = "CREATE TABLE " + TABLE + " (" + 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + 
      COLUMN_TITLE + " nvarchar(255)," + 
      COLUMN_TEXT + " text," + 
      COLUMN_DATE_TIME + " nvarchar(255));"; 

    public DBGcmMessages(Context context) { 

     super(context, DB_NAME, null, DB_VERSION); 
     mContext = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     try { 

      db.execSQL(CREATE_TABLE); 
      L.m("Create table gcm messages successfully!"); 

     } catch (SQLiteException exception) { 

      L.m(exception.getMessage()); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     try { 

      L.m("upgrade table gcm message executed!"); 

      db.execSQL("DROP TABLE " + TABLE + " IF EXISTS;"); 

      onCreate(db); 
     } 
     catch (SQLiteException exception) { 

      L.m(exception.getMessage()); 
     } 
    } 

    public void insert(String title, String text, String dateTime) { 

     try { 

      if (title == null || text == null) return; 

      this.mDatabase = this.getWritableDatabase(); 

      //Insert 
      String sql = "INSERT INTO " + TABLE + "(" + 
        COLUMN_TITLE + "," + 
        COLUMN_TEXT + "," + 
        COLUMN_DATE_TIME + ") VALUES (?,?,?);"; 

      SQLiteStatement statement = this.mDatabase.compileStatement(sql); 

      statement.bindString(1, title); 
      statement.bindString(2, text); 
      statement.bindString(3, dateTime); 

      statement.execute(); 

      L.m("Insert gcm message successfully!"); 
     } 
     finally { 

      if(this.mDatabase != null) this.mDatabase.close(); 
      this.close(); 
     } 
    } 

    public void delete(int id) { 

     try { 

      this.mDatabase = this.getWritableDatabase(); 

      this.mDatabase.execSQL("Delete from " + TABLE + " where " + COLUMN_ID + "='" + id + "'"); 

      L.m("Delete gcm message successfully!"); 
     } 
     finally { 

      if(this.mDatabase != null) this.mDatabase.close(); 
      this.close(); 
     } 
    } 

    public ArrayList<GCMMessage> getAll() { 

     this.mDatabase = this.getWritableDatabase(); 

     Cursor result = null; 

     try { 

      result = this.mDatabase.rawQuery("select * from " + TABLE + " order by " + COLUMN_ID + " desc", null); 

      int rows = result.getCount(); 
      if (rows == 0) return null; 

      ArrayList<GCMMessage> messages = new ArrayList<>(); 

      result.moveToFirst(); 
      for (int i = 0; i < rows; i++) { 

       int id = result.getInt(0); 
       String title = result.getString(1); 
       String text = result.getString(2); 
       String dateTime = result.getString(3); 

       messages.add(new GCMMessage(id, title, text, dateTime)); 

       result.moveToNext(); 
      } 

      L.m("Get all gcm message : " + rows); 

      return messages; 

     } catch (Exception ex) { 

      return null; 
     } 
     finally { 

      if(result != null) result.close(); 
      if(this.mDatabase != null) this.mDatabase.close(); 
      this.close(); 
     } 
    } 
} 
+0

これは動作しません。アプリがバックグラウンドの場合、GCMリスナーは呼び出されません。それはアンドロイド通知トレイに通知を送信し、ユーザーが通知をクリックすると意図を開始します。 –

+0

それはあなたには分かりません。 – javadaskari

関連する問題