在学习Service和广播的时候遇到一点小问题,在此记下:
需求:我们经常需要去调用service的方法或取service某个状态的值。这时需要service和客户端之间的通信。启动方式:startService(context,service)
问题:在service中启动一个线程,不断更新count变量的数值(每隔1秒钟加1),在Activity客户端编写一个Broadcast,获得该count的值。在service端,传递数据的intent如下:
Intent intent = new Intent();
intent.addAction(broadcast的action);
intent.intent.putExtra("count", count);
sendBroadcast(intent);
在Broadcast端接收数据如下:
int count= intent.getIntExtra("count",-1);
结果报如下错误:
03-27 06:40:17.556: E/AndroidRuntime(587): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.gem.action.Receiver_Action (has extras) } in com.gem.broadcastservice.BroadcastAndServiceActivity$ClientReceiver@4051af38
解决问题:经测试发现带字符串可以带过去,带整数就带不过去。把代码改成如下则可以:
在service端,传递数据的intent如下:
Intent intent = new Intent();
intent.addAction(broadcast的action);
intent.intent.putExtra("count", count+"");
sendBroadcast(intent);
在Broadcast端接收数据如下:
int count = intent.getStringExtra("count");
环境是:Android2.3.3。