2011-04-14 14 views
2

デバイスにプッシュ通知を送信する動作中のサーバー/クライアントソリューションがあります。私のプロジェクトの次のステップは、C2DMReceiverクラスでonReceiveイベントが呼び出されたときに、アクティビティウィンドウにダイアログを表示することです。C2DMプッシュ通知が受信されたときのアクティビティの動作の変更

私はアンドロイドに新しいです、私はこれを行う方法が分からないので、誰かが私にこれを説明することができれば、私は本当に幸せになります。

基本的に私は、C2DMのためchrometophoneアプリケーションからクラスを再利用します。私がlogcatのログエントリを作成すると、onReceiveイベントが呼び出されます。 C2DMReceiverはサービスなので、新しいメッセージがあれば私の活動についてどのように通知されますか?

私はたくさんのグーグルで探せましたが、実際の解決策を見つけることができませんでした...私はregisterReceiver()を使用しようとしましたが、私は間違っていたと確信しています。誰かが例を持っていますか?

オクラホマので、ここで私は今のところ得たものである:

BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
     Log.w(Consts.LOG_TAG_SERVICE, "Test"); 
     } 
    }; 

    // Called when the activity is first created. 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Log.w(Consts.LOG_TAG_SERVICE, "started"); 

    } 

    // Called when the activity is restarted 
    protected void onResume() { 
     super.onResume(); 

     IntentFilter filter = new IntentFilter(); 
     filter.addCategory("com.mydomain.myapp.CONTEXT"); 

     registerReceiver(mReceiver, filter); 
    } 

    // Called when the activity is closed 
    protected void onPause() { 
     super.onPause(); 

     unregisterReceiver(mReceiver); 
    } 

C2DMReceiver パブリッククラスC2DMReceiverがC2DMBaseReceiver {

public C2DMReceiver() { 
    super("[email protected]"); 

    // TODO Load dynamic Gmail address 
} 

@Override 
public void onRegistrered(Context context, String registrationId) { 
    Log.i(Consts.LOG_TAG_SERVICE, registrationId); 

    // Store the registration id in the preferences 
    SharedPreferences settings = Prefs.get(context); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString("deviceRegistrationID", registrationId); 
    editor.commit(); 

    // TODO: Send ID to server 
} 

@Override 
public void onUnregistered(Context context) { 
    Log.w(Consts.LOG_TAG_SERVICE, "got here!"); 
} 

@Override 
public void onError(Context context, String errorId) { 
    Log.w(Consts.LOG_TAG_SERVICE, errorId); 
} 

@Override 
protected void onMessage(Context context, Intent intent) { 
    Log.w(Consts.LOG_TAG_SERVICE, "C2DMReceiver: " + intent.getStringExtra("payload")); 

    Intent broadcastIntent = new Intent(); 
    broadcastIntent.setAction("com.mydomain.myapp.NEWMESSAGE"); 
    broadcastIntent.putExtra("reading", intent.getStringExtra("payload")); 
    broadcastIntent.addCategory("com.mydomain.myapp.CONTEXT"); 
    context.sendBroadcast(broadcastIntent); 

} 

} 

これは、私が得たすべてであるが拡張

活動しかし、私は自分の放送を受け取ることはありません..誰かがいくつかの入力を持っていますか?

+0

だけ明確にするために、ライン 'Log.w(Consts.LOG_TAG_SERVICE、 "C2DMReceiver:" + intent.getStringExtra( "ペイロード"));'右、到達しましたか? – uvesten

+0

はいそれがあります!私はlogcatを使ってデバイスにプッシュしたものを見ることができます – nino

+0

私の答えはまったく役に立ちましたか? – uvesten

答えて

3

これはそれを行う必要があります。

@Override 
protected void onMessage(Context context, Intent intent) { 

    Log.w(Consts.LOG_TAG_SERVICE, "C2DMReceiver: " + intent.getStringExtra("payload")); 

    Intent i = new Intent(context, YourMainActivity.class); 
    i.putExtra("reading", intent.getStringExtra("payload")); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 

} 

次に、あなたのメインアクティビティであなたのonStartのインテントを処理します。アクティビティがすでに実行されている場合は、既存のインスタンスによって処理されます。存在しない場合は、新しいインスタンスが開始されます。

+0

または、このガイドに従ってステータスバーの通知を作成して、ユーザーがアプリを起動するかどうかを選択することもできます。よりクリーンな方法です:http://developer.android.com/guide/topics/ui/notifiers/notifications.html – uvesten

関連する問題