zoukankan      html  css  js  c++  java
  • AIDL--------应用之间的通信接口

    在下面例子中04Service中添加aidl包包里定义好接口 接口文件名后缀为.aidl

    package com.example.aidl;

    interface IRemoteService
    {
    void print(String msg);
    String getName();

    }

    在04 client中也有这样一个包 这个包就成为一个接口   Service里实现接口  client中可以调用注意

    Service中定义好service的action  client中绑定服务时用这个action

    <service android:name=".RemoteService">
    <intent-filter >
    <action android:name="com.example.service04aidl.RemoteService"/>
    </intent-filter>
    </service>

    绑定时用到

    bindService(new Intent("com.example.service04aidl.RemoteService"),conn,BIND_AUTO_CREATE);

    客户端每次绑定都会创建一个与客户端activity绑定的Service  activity销毁服务也会销毁

     1 package com.example.service04_client;
     2 
     3 import android.app.Activity;
     4 import android.content.ComponentName;
     5 import android.content.Intent;
     6 import android.content.ServiceConnection;
     7 import android.os.Bundle;
     8 import android.os.IBinder;
     9 import android.os.RemoteException;
    10 import android.view.View;
    11 import android.widget.Toast;
    12 
    13 import com.example.aidl.IRemoteService;
    14 
    15 public class MainActivity extends Activity {
    16 
    17     IRemoteService remoteService;
    18     ServiceConnection conn=new ServiceConnection() {        
    19         @Override
    20         public void onServiceDisconnected(ComponentName name) {
    21 
    22         }
    23         
    24         @Override
    25         public void onServiceConnected(ComponentName name, IBinder service) {
    26             remoteService=IRemoteService.Stub.asInterface(service);    
    27         }
    28     };
    29     
    30     @Override
    31     protected void onCreate(Bundle savedInstanceState) {
    32         super.onCreate(savedInstanceState);
    33         setContentView(R.layout.activity_main);
    34         
    35         bindService(new Intent("com.example.service04aidl.RemoteService"),conn,BIND_AUTO_CREATE);
    36     }
    37     public void print(View v) throws RemoteException
    38     {
    39         if(remoteService!=null)
    40         remoteService.print("hello,service");
    41     }
    42     public void getRemoteName(View v) throws RemoteException
    43     {
    44         if(remoteService!=null)
    45         Toast.makeText(getApplicationContext(), remoteService.getName(), 1).show();
    46     }
    47     
    48 }
    04Service—mainActivity
     1 package com.example.service04aidl;
     2 
     3 import com.example.aidl.IRemoteService;
     4 
     5 import android.app.Service;
     6 import android.content.Intent;
     7 import android.os.IBinder;
     8 import android.os.RemoteException;
     9 import android.util.Log;
    10 
    11 public class RemoteService extends Service {
    12 
    13     private IRemoteService.Stub stub=new IRemoteService.Stub() {    
    14         @Override
    15         public void print(String msg) throws RemoteException {
    16             Log.i("debug", "RemoteService---"+msg);
    17         }
    18         @Override
    19         public String getName() throws RemoteException {
    20             return "RemoteService";
    21         }
    22     };
    23     @Override
    24     public IBinder onBind(Intent intent) {
    25         // TODO Auto-generated method stub
    26         return stub;
    27     }
    28 
    29 }
    04Service--RemoteService
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.example.service04aidl"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="8"
     9         android:targetSdkVersion="17" />
    10 
    11     <application
    12         android:allowBackup="true"
    13         android:icon="@drawable/ic_launcher"
    14         android:label="@string/app_name"
    15         android:theme="@style/AppTheme" >
    16         <activity
    17             android:name="com.example.service04aidl.MainActivity"
    18             android:label="@string/app_name" >
    19             <intent-filter>
    20                 <action android:name="android.intent.action.MAIN" />
    21 
    22                 <category android:name="android.intent.category.LAUNCHER" />
    23             </intent-filter>
    24         </activity>
    25         <service android:name=".RemoteService">
    26             <intent-filter >
    27                 <action android:name="com.example.service04aidl.RemoteService"/>
    28             </intent-filter>
    29         </service>
    30     </application>
    31 
    32 </manifest>
    04----xml
     1 package com.example.service04_client;
     2 
     3 import android.app.Activity;
     4 import android.content.ComponentName;
     5 import android.content.Intent;
     6 import android.content.ServiceConnection;
     7 import android.os.Bundle;
     8 import android.os.IBinder;
     9 import android.os.RemoteException;
    10 import android.view.View;
    11 import android.widget.Toast;
    12 
    13 import com.example.aidl.IRemoteService;
    14 
    15 public class MainActivity extends Activity {
    16 
    17     IRemoteService remoteService;
    18     ServiceConnection conn=new ServiceConnection() {        
    19         @Override
    20         public void onServiceDisconnected(ComponentName name) {
    21 
    22         }
    23         
    24         @Override
    25         public void onServiceConnected(ComponentName name, IBinder service) {
    26             remoteService=IRemoteService.Stub.asInterface(service);    
    27         }
    28     };
    29     
    30     @Override
    31     protected void onCreate(Bundle savedInstanceState) {
    32         super.onCreate(savedInstanceState);
    33         setContentView(R.layout.activity_main);
    34         
    35         bindService(new Intent("com.example.service04aidl.RemoteService"),conn,BIND_AUTO_CREATE);
    36     }
    37     public void print(View v) throws RemoteException
    38     {
    39         if(remoteService!=null)
    40         remoteService.print("hello,service");
    41     }
    42     public void getRemoteName(View v) throws RemoteException
    43     {
    44         if(remoteService!=null)
    45         Toast.makeText(getApplicationContext(), remoteService.getName(), 1).show();
    46     }
    47     
    48 }
    client
  • 相关阅读:
    UVALive 7141 BombX
    CodeForces 722D Generating Sets
    CodeForces 722C Destroying Array
    CodeForces 721D Maxim and Array
    CodeForces 721C Journey
    CodeForces 415D Mashmokh and ACM
    CodeForces 718C Sasha and Array
    CodeForces 635C XOR Equation
    CodeForces 631D Messenger
    田忌赛马问题
  • 原文地址:https://www.cnblogs.com/bimingcong/p/4822175.html
Copyright © 2011-2022 走看看