我试图通过intent从服务调用BroadcastReceiver。
我在服务文件中调用BroadcastReceiver如下:
final Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
// code here what ever is required
System.out.println("Runnnn");
counter++;
Intent i = new Intent();
i.setAction("Refresh");
Bundle b = new Bundle();
b.putInt("Counter", counter);
i.putExtra("Bundle", b);
ctx.sendBroadcast(i);
handler.postDelayed(this, 1000);
Toast.makeText(getApplicationContext(), "counter"+counter, Toast.LENGTH_LONG).show();
}
};
handler.postDelayed(r, 1000);
BroadcastReceiver中的onReceive()
如下:
public void onReceive(Context context, Intent arg1) {
System.out.println("OnReceiveeeeee");
if(arg1.getAction().equalsIgnoreCase("Refresh"))
{
System.out.println("Received Intent");
Bundle b = arg1.getExtras();
c=b.getInt("Counter");
System.out.println("Counter in Receiver:::"+c);
}
}
但我在onReceive中的价值为零。
任何帮助都可以在onReceive()方法中获得正确的值。
将等待回复。
答案 0 :(得分:1)
这里是用于广播注销的代码片段,用于在返回登录屏幕时提示我的所有应用活动关闭
logoutBroadcastReceiver lbr;
@Override
public void onResume(){
...
// register the broadcast receiver
IntentFilter intentfilter = new IntentFilter("com.on3x.action.DO_LOGOUT");
lbr = new logoutBroadcastReceiver();
registerReceiver(lbr,intentfilter);
super.onResume();
...
}
// broadcast receiver grabbing the "test" bundled extra
public class logoutBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(getString(R.string.app_name), "broadcast string: " + intent.getStringExtra("string_example"));
Log.d(getString(R.string.app_name), "extra!: " + intent.getIntExtra("int_example",0));
finish();
}
}
// broadcast the intent to logout when logout button clicked
// put the extra "test" in the bundle
public void onClickLogout(View _view) {
Intent i = new Intent("com.on3x.action.DO_LOGOUT");
i.putExtra("string_example", "here is a broadcasted string");
i.putExtra("int_example", 100);
sendBroadcast(i);
}
我希望代码可以帮助你让你的工作吗?
修改:已更新为使用putExtra()
和getStringExtra()/getIntExtra()
答案 1 :(得分:1)
您的访问方式错误。
Bundle b = arg1.getExtras();
您需要按以下方式访问。
Bundle b = intent.getBundleExtra("Bundle");
=============================================== =
您也可以在不使用捆绑包的情况下编写代码:
在服务中
i.putExtra("Counter", counter);
在BroadcastReceiver中
intent.getIntExtra("Counter", -1); // -1 is defalut value