2

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

アンドロイド初心者でやり方がよくわからないので、どなたか教えていただけると嬉しいです。

基本的に、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 public class C2DMReceiver extends C2DMBaseReceiver {

public C2DMReceiver() {
    super("my_test@gmail.com");

    // 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);

}

}

私が得たのはこれだけですが、自分のブロードキャストを受信することはありません.. 誰か入力がありますか?

4

1 に答える 1

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 でインテントを処理します。アクティビティが既に実行されている場合は、既存のインスタンスによって処理されます。そうでない場合は、新しいインスタンスが開始されます。

于 2011-04-14T14:27:55.733 に答える