RemoteService

1. 定义 IRemoteService.aidl

packagecom.zaoqibu.remoteservice;//Declareanynon-defaulttypesherewithimportstatementsinterfaceIRemoteService{/**RequesttheprocessIDofthisservice,todoevilthingswithit.*/intgetPid();/**DemonstratessomebasictypesthatyoucanuseasparametersandreturnvaluesinAIDL.*/voidbasicTypes(intanInt,longaLong,booleanaBoolean,floataFloat,doubleaDouble,StringaString);}

  • 定义了两个方法,输入和输出参数都是简单类型(int, long, boolean, float, double, String)。

  • 编译程序,将会在 build/generated/ 目录下生成 IRemoteService.java 的文件,里面有 IRemoteService.Stub 服务的存根代理类。

2. 创建服务 RemoteService 类

publicclassRemoteServiceextendsService{privatestaticfinalStringTAG="RemoteService";@OverridepublicvoidonCreate(){super.onCreate();}@OverridepublicIBinderonBind(Intentintent){returnbinder;}privatefinalIRemoteService.Stubbinder=newIRemoteService.Stub(){publicintgetPid(){returnProcess.myPid();}publicvoidbasicTypes(intanInt,longaLong,booleanaBoolean,floataFloat,doubleaDouble,StringaString){Stringstr=String.format("anInt:%d,aLong:%d,aBoolean:%b,aFloat:%f,aDouble:%f,aString:%s",anInt,aLong,aBoolean,aFloat,aDouble,aString);Log.i(TAG,str);}};}

  • 实现存根代理类 IRemoteService.Stub。

3. 在 AndroidManifest.xml 中声明 RemoteService

<serviceandroid:name=".RemoteService"android:process=":remote"><intent-filter><!--Thesearetheinterfacessupportedbytheservice,whichyoucanbindto.--><actionandroid:name="com.zaoqibu.remoteservice.IRemoteService"/></intent-filter></service>

Client

1. 从 RemoteService 工程中拷贝 IRemoteService.aidl 文件

  • 保持原路径

2. 调用 IRemoteService 方法。

publicclassMainActivityextendsActionBarActivity{privatestaticfinalStringTAG="MainActivity";privateIRemoteServiceiremoteService;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindService(newIntent(IRemoteService.class.getName()),serviceConnection,BIND_AUTO_CREATE);}privateServiceConnectionserviceConnection=newServiceConnection(){//CalledwhentheconnectionwiththeserviceisestablishedpublicvoidonServiceConnected(ComponentNameclassName,IBinderservice){//FollowingtheexampleaboveforanAIDLinterface,//thisgetsaninstanceoftheIRemoteInterface,whichwecanusetocallontheserviceiremoteService=IRemoteService.Stub.asInterface(service);}//CalledwhentheconnectionwiththeservicedisconnectsunexpectedlypublicvoidonServiceDisconnected(ComponentNameclassName){Log.e(TAG,"Servicehasunexpectedlydisconnected");iremoteService=null;}};publicvoidonRemoteServiceProcessIDClick(Viewview){intprocessID=0;try{processID=iremoteService.getPid();iremoteService.basicTypes(1,2,true,3.3f,4.4,"hello");}catch(RemoteExceptione){e.printStackTrace();}TextViewremoteServiceProcessID=(TextView)findViewById(R.id.remoteServiceProcessID);remoteServiceProcessID.setText(String.valueOf(processID));}}


3. 运行


更多相关文章

  1. android 简单文件管理器的实现
  2. Android(安卓)Dialog 全屏
  3. android使用文件进行存储
  4. android 反编译工具
  5. [JAVA] Android用到的一些文件操作
  6. android AppWidget的使用以及利用Service TimerTask实现widget的
  7. Android(安卓)Spinner 文字居中、其下拉窗口文字居中,自定义Spinn
  8. Android(安卓)遍历文件夹,搜索指定扩展名的文件
  9. Android(安卓)EditText 自定义带删除按钮

随机推荐

  1. Android(安卓)仿通讯录侧边栏滑动 SiderB
  2. android 5.0 修改默认壁纸
  3. android L 的开机动画流程
  4. Flutter&Android&Ios混合工程---1
  5. Android中ViewPager和PagerAdapter的简单
  6. Android(安卓)源码编译环境的搭建
  7. 怎么解决这个问题“The connection to ad
  8. Android(安卓)Audio 分析
  9. 8.3facebook分享后不回调结果原因,java标
  10. ANDROID_SDK_HOME的设置