AIDL简单使用(经过它跨应用传递对象(数据))

服务端步骤:java


一、新建一个包 在包里新建一个接口MyServiceAIDL(接口名本身取)android

 

代码app

//接口前面不要有public 等 否则会报错
interface MyServiceAIDL {
//这个接口内的方法能够本身根据业务需求本身添加相应的方法
//这里简单建一个getData方法
//方法名前面不要有public 等否则会报错
 String getData();
}

 


二、建无缺接口须要到找到你新建的接口类,工程保存路径:右击工程-->properties-->右边有个Location位置
根据该位置找到本身刚刚新建的接口类,而后把后缀名改成.aidl 在回到本身工程刷新一下ide

 

 

三、在建一个类继承Servicethis

 

代码spa

 public class MyService extends Service {
 @Override
 public void onCreate() {
  // TODO Auto-generated method stub
  super.onCreate();
 }
 
 @Override
 public IBinder onBind(Intent intent) {
  // TODO Auto-generated method stub
  return new MyBindService();
 }
 
 @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();
 }
 
 //AIDL --> 要继承Stub 而不是Binder
 //而后还要在配置清单里添加服务(隐式意图)
 class MyBindService extends Stub{
  @Override
  public String getData() throws RemoteException {
   // TODO Auto-generated method stub
   return "(跨进程)服务端返回来的消息";
  }
  
 }
}

 

 

四、在配置清单里注册建立的服务code

代码xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.service.aidl"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <!-- android:exported="true"表示能够跨进程访问
        android:enabled="true"表示激活
        action 表示客户端要访问在这里的服务的路径action -->
        <service android:name=".MyService"
            android:enabled="true"
            android:exported="true">
            <intent-filter >
                <action android:name="com.examp.remote.service.MyService"/>
            </intent-filter>
        </service>
        
    </application>
</manifest>

 

 

 

 

 

========================================================对象

 

 

 

 


服务端写好后写客户端继承

 

客户端步骤:


一、把服务端新建的接口连同包一块儿拷贝到客户端的源文件(src)下

 


二、MainActivity.java类


代码

public class MainActivity extends Activity {
 private TextView text_info;
 private MyServiceAIDL myServiceAIDL;//声明本身建的接口对象
 private ServiceConnection connection = new ServiceConnection() {
  @Override
  public void onServiceDisconnected(ComponentName name) {
   // TODO Auto-generated method stub
   
  }
  
  @Override
  public void onServiceConnected(ComponentName name, IBinder binder) {
   //经过Stub.asInterface方法把IBinder返回来的对象转换而后赋值给MyServiceAIDL接口声明的对象
   myServiceAIDL = Stub.asInterface(binder);
   
  }
 };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  this.text_info = (TextView) this.findViewById(R.id.textview);
  
  bindMyService();//绑定服务
 }
 
 private void bindMyService() {
  Intent intent = new Intent();
  
  //经过隐式意图来绑定服务
  intent.setAction("com.examp.remote.service.MyService");
  bindService(intent, connection, Context.BIND_AUTO_CREATE);
 }
 
 //按钮的事件监听
 public void bindRemoteService(View view){
  try {
   //这里经过本身建立的接口对象来获取服务端的数据
   text_info.setText(myServiceAIDL.getData());
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

 

 

效果图示例:

 

 

 

相关文章
相关标签/搜索