【问题标题】:Extract Data In Broadcast Receiver Class在广播接收器类中提取数据
【发布时间】:2014-03-04 18:07:23
【问题描述】:

我正在开发一个应用程序。我正在使用此代码将从 Google 获取的注册 ID 从广播接收器类发送到 Main Activity 类。

context.sendBroadcast(new Intent("com.example.sampletestproject.REGISTER_DEVICE"). putExtra("GCM_REG_ID",registrationId));

现在我想在 Main Activity 类中接收此注册 ID。我试图通过创建一个新的广播接收器类但没有获得价值来做到这一点。 Main Activity 的代码是。

Button bt1,bt2;

BroadcastReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    registerReceiver(mReceiver, new IntentFilter("com.example.sampletestproject.REGISTER_DEVICE"));

    bt1=(Button) findViewById(R.id.button1);
    bt2=(Button) findViewById(R.id.button2);
    bt1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) 
        {
            //Log.d("msg", "Button clicked");
            Toast.makeText(MainActivity.this, "Button clicked", Toast.LENGTH_LONG).show();
            Intent registrationIntent=new Intent("com.google.android.c2dm.intent.REGISTER");
        //  Log.d("msg", "Intent created");
            Toast.makeText(MainActivity.this, "Intent created", Toast.LENGTH_LONG).show();
            registrationIntent.putExtra("app", PendingIntent.getBroadcast(v.getContext(),0,new Intent(),0));
            registrationIntent.putExtra("senderid","908614649566");
            startService(registrationIntent);
            //Log.d("msg", "Intent Registered");
            Toast.makeText(MainActivity.this, "Intent Register", Toast.LENGTH_LONG).show();

        }
    });
    bt2.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View v) {
            Intent unregintent=new Intent("com.google.android.c2dm.intent.UNREGISTER");
            unregintent.putExtra("app", PendingIntent.getBroadcast(v.getContext(),0, new Intent(), 0));
            startService(unregintent);
            Toast.makeText(MainActivity.this, "Intent unregister", Toast.LENGTH_LONG).show();

        }
    });

     mReceiver = new BroadcastReceiver()
    {

        @Override
        public void onReceive(Context context, Intent intent) 
        {
            //post registration id to server
            Toast.makeText(MainActivity.this, "within new broadcast receiver in mainactivity", Toast.LENGTH_LONG).show();
            Intent it=getIntent();
            it.getExtras().get("GCM_REG_ID");

        }
    };

}

【问题讨论】:

  • 先初始化mReceiver,然后注册...
  • 接口回调在我看来会更有用
  • 清单文件中的广播接收器寄存器?

标签: android broadcastreceiver


【解决方案1】:

应该是这样的。

按钮 bt1,bt2;

广播接收器 mReceiver; @覆盖 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

bt1=(Button) findViewById(R.id.button1);
bt2=(Button) findViewById(R.id.button2);
bt1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) 
    {
        //Log.d("msg", "Button clicked");
        Toast.makeText(MainActivity.this, "Button clicked", Toast.LENGTH_LONG).show();
        Intent registrationIntent=new Intent("com.google.android.c2dm.intent.REGISTER");
    //  Log.d("msg", "Intent created");
        Toast.makeText(MainActivity.this, "Intent created", Toast.LENGTH_LONG).show();
        registrationIntent.putExtra("app", PendingIntent.getBroadcast(v.getContext(),0,new Intent(),0));
        registrationIntent.putExtra("senderid","908614649566");
        startService(registrationIntent);
        //Log.d("msg", "Intent Registered");
        Toast.makeText(MainActivity.this, "Intent Register", Toast.LENGTH_LONG).show();

    }
});
bt2.setOnClickListener(new OnClickListener() 
{

    @Override
    public void onClick(View v) {
        Intent unregintent=new Intent("com.google.android.c2dm.intent.UNREGISTER");
        unregintent.putExtra("app", PendingIntent.getBroadcast(v.getContext(),0, new Intent(), 0));
        startService(unregintent);
        Toast.makeText(MainActivity.this, "Intent unregister", Toast.LENGTH_LONG).show();

    }
});

 mReceiver = new BroadcastReceiver()
{

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        //post registration id to server
        Toast.makeText(MainActivity.this, "within new broadcast receiver in mainactivity", Toast.LENGTH_LONG).show();
        Intent it=getIntent();
        it.getExtras().get("GCM_REG_ID");

    }
};registerReceiver(mReceiver, new IntentFilter("com.example.sampletestproject.REGISTER_DEVICE"));

}

【讨论】:

  • 强制关闭。请提供另一种解决方案。
【解决方案2】:

由于 Receiver 是在 Activity 中创建的,因此只有在 Activity 启动时,Receiver 才会处于活动状态。 Better Idea 单独创建receiver,并在Android Manifest 中注册 参考this example

【讨论】:

  • 但我希望我的结果在 mainactivity.so 单独创建另一个接收器不是一个好的选择。
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多