现在的位置: 首页 > 综合 > 正文

service aidl

2017年11月18日 ⁄ 综合 ⁄ 共 2686字 ⁄ 字号 评论关闭

服务端代码:

第一定义一个service工程,用于启动一个服务。在该工程源码下定义一个aidl文件。

package com.example.service;

interface DataService{

double getData(String arg);

 

}

必须要有包名。

 

public class MainActivity extends Activity {

private Button btn=null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn=(Button)this.findViewById(R.id.button1);

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// 启动一个服务

Intent intent=new Intent(MainActivity.this,MyService.class);

startService(intent);

}

});

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

 

}

 

public class MyService extends Service {

 

@Override

public IBinder onBind(Intent arg0) {

//返回binderdidl文件生成

return binder;

}

//定义给客户端调用的方法 (aidl文件)

Binder binder=new DataService.Stub() {

@Override

public double getData(String arg) throws RemoteException {

if(arg=="a"){

return 1;

}

if(arg=="b"){

return 2;

}

return 0;

}

};

 

}

 

客户端代码:

要把服务端aidl文件拷贝到客户端

public class MainActivity extends Activity {

private Button btn1,btn2;

//定义一个AIDL实例

private DataService dataService;

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn1=(Button)this.findViewById(R.id.button1);

btn2=(Button)this.findViewById(R.id.button2);

tv=(TextView)this.findViewById(R.id.textView1);

//绑定服务

btn1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(DataService.class.getName());

//启动服务

bindService(intent, connBIND_AUTO_CREATE);

}

});

//调用服务的方法

btn2.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

try {

int result=(intdataService.getData("a");

tv.setText(result+"");

catch (RemoteException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

}

//客户端与服务交互

private ServiceConnection conn=new ServiceConnection() {

@Override

public void onServiceDisconnected(ComponentName name) {

}

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

//传入service

dataService=DataService.Stub.asInterface(service);

}

};

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

 

}

在配置文件:

  <service 

            android:name="com.example.android_aidl_service.MyService"

            >

            <intent-filter>

                <!-- 意图过滤器要把aidl包名加类名 -->

                <action android:name="com.example.service.DataService"/>

            </intent-filter>

        </service>

 

抱歉!评论已关闭.