[求助] Service本地服务通信的问题

chenbingjy   2015-9-24 19:29 楼主
我在学习安卓,看书,第七章:服务与消息广播 本地服务通信。 新建了一个项目,布局文件里添加了三个按钮,一个启动Service,一个停止Service,一个获取数据。 定义了一个Service3子类,使它继承于Service类,主要代码如下: public class Service3 extends Service { private int counter=0; private boolean bRunning=true; private mBinder binder=new mBinder(); //定义onBinder返回的对象 public class mBinder extends Binder{ //通过继承实现Binder类 public int getCounter(){ return counter; } } @Override public IBinder onBind(Intent arg0){ return binder; //返回IBinder对象 } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub return super.onUnbind(intent); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); bRunning = false; } @Override public void onCreate() { Exception e; // TODO Auto-generated method stub super.onCreate(); new Thread(new Runnable() { //启动线程,修改counter值 public void run() { // TODO Auto-generated method stub while (!bRunning) { try { Thread.sleep(1000); } catch (Exception e) {} counter++; } } }) .start(); } } 本帖最后由 chenbingjy 于 2015-9-24 19:33 编辑
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复评论 (6)


在Manifest.xml文件中声明Service3,并配置子标签,设置Action属性,代码如下:

            
               
               
            

        


在MainActivity中声明一个Intent对象用于标识目标Service,声明一个Service3.mIbind对象用于获取数据,声明ServiceConnection并实现其方法,
用于监听访问者与Service之间的连接情况,代码如下:
private Intent intent=new Intent();
        private Service3.mBinder binder;
        private ServiceConnection sConnection=new ServiceConnection(){
                public void onServiceDisconnected(ComponentName name){
                        System.out.println("--ServiceDisconnected--");
                }
                public void onServiceConnected(ComponentName name,IBinder service){
                        
                        System.out.println("--ServiceConnected--");
                binder=(Service3.mBinder)service;
                }
        };
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2015-9-24 19:29
在MianActivity中,设置Intent所触发的Action字符串,声明3个Button控件并绑定监听,第一个用于启动Service,第二个用于停止Service,
第三个用于获取数据并使用Toast显示信息,代码如下:
setContentView(R.layout.activity_main);
                String ccb;
                intent.setAction("android.service");
               
                ccb=this.getPackageName();
                intent.setPackage(ccb);
                Button button1=(Button)findViewById(R.id.button1);
                button1.setOnClickListener(new OnClickListener(){
                        public void onClick(View v){
                        
                                bindService(intent,sConnection,BIND_AUTO_CREATE);
                                
                        }
                });
                Button button2=(Button)findViewById(R.id.button2);
                button2.setOnClickListener(new OnClickListener(){
                        public void onClick(View v){
                                unbindService(sConnection);
                        }
                });
                Button button3=(Button)findViewById(R.id.button3);
                button3.setOnClickListener(new OnClickListener(){
                        public void onClick(View v){
                                Toast.makeText(MainActivity.this,
                                                "Service的counter值为"+binder.getCounter(),
                                                Toast.LENGTH_LONG).show();
                        }
                });
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2015-9-24 19:30
3.jpg 4.jpg 5.jpg 可是,我运行时点击第一个按钮,出错,见附件。请高手指教,怎么解决?谢谢!
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2015-9-24 19:32
完全不懂,帮顶
有空也学学
是谷歌的官方环境么?
So TM what......?
点赞  2015-9-24 21:44
eclipse
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞  2015-9-25 08:30
QQ截图20151007161920.png


分享铸就美好未来。。。
点赞  2015-10-7 16:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复