Android AIDL 使用 2 --在android studio中实现AIDL
来源:互联网 发布:人工智能读后感 编辑:程序博客网 时间:2024/04/29 04:32
android studio中实现AIDL过程
首先我们要明白aidl的作用是什么?比如说我们提供了一个服务,当别的程序(可以看成是一个其他的进程)要来使用我们提供的服务的时候,这个时候就需要用到aidl来进行通信.至于实现的原理度娘里面有大量的文章可以参考,并不是本文重点,所以不做赘述.
· 1.创建两个应用
- ServiceApplication 服务端应用【服务进程】
- TestClientApplication 客户端应用 【访问使用进程】
· 2.ServiceApplication端
2.1 在Main目录下创建AIDL文件,android studio可以自动创建。
2.2 生成的AIDL文件目录是和Java目录同级,并且包名必须和Manifest中的包名一致
- AIDL文件结构
- manifest.xml
- AIDL文件结构
2.3 配置AIDL文件
- IMusicPlayerService.aidl
// IMusicPlayerService.aidlpackage com.xiaochi.mutiplemediaplayer;// Declare any non-default types here with import statementsinterface IMusicPlayerService { /** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); int caculate(int a,int b);}
- IMusicPlayerService.aidl
2.4 rebuild project 生成Java文件
2.5 创建一个对外公开的Service,返回生成的AIDL对象,这里只是大概过程,详细过程和实现后续会说明
自定义服务的实现MusicPlayerService ,可以定制需要的功能
package com.xiaochi.mutiplemediaplayer.services; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; import android.support.annotation.Nullable; import android.util.Log; import com.xiaochi.mutiplemediaplayer.IMusicPlayerService; /** * Created by Administrator on 2016/12/10. */ public class MusicPlayerService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return mMusicBinder; } @Override public void onCreate() { super.onCreate(); Log.i("kxx", "create aidl service "); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("kxx", "onstartcommand"); return super.onStartCommand(intent, flags, startId); } IMusicPlayerService.Stub mMusicBinder = new IMusicPlayerService.Stub() { @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } @Override public int caculate(int a, int b) throws RemoteException { return a + b; } }; }
在Manifest中定义Service组件和启动Action
<!--AIDL service--> <service android:name=".services.MusicPlayerService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.xiaochi.mutiplemediaplayer.MusicPlayerService" /> </intent-filter> </service>
· TestClientApplication 客户端使用
- 将服务端的AIDL目录全部copy到客户端上,也是在Main目录下,不需要更改任何东西
- 然后rebuild project项目
在客户端进行服务绑定
public class MainActivity extends AppCompatActivity { public IMusicPlayerService iMusicPlayerService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { iMusicPlayerService = IMusicPlayerService.Stub.asInterface(service); try { int sum = iMusicPlayerService.caculate(10, 20); Toast.makeText(MainActivity.this, " sum = " + sum, Toast.LENGTH_SHORT).show(); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { iMusicPlayerService = null; } }; Intent intent = new Intent(); intent.setAction("com.xiaochi.mutiplemediaplayer.MusicPlayerService"); intent.setPackage("com.xiaochi.mutiplemediaplayer"); bindService(intent, connection, Service.BIND_AUTO_CREATE); } }
NOTE: 使用隐式开启服务的时候在5.0及以上版本默认是不能直接通过action开启的,使用意图的时候加上setPackage就可以解决.
0 0
- Android AIDL 使用 2 --在android studio中实现AIDL
- Aidl在android studio中实现
- AIDL在Android Studio中简单使用
- Android Studio中实现AIDL
- Android Studio中使用AIDL
- android studio 中使用aidl
- Android Studio AIDL实现
- Android Studio 使用AIDL
- Android Studio 使用AIDL
- Android Studio 使用AIDL
- 在Android Studio中实现AIDL远程服务调用
- 在android studio中使用aidl文件注意事项
- Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
- Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
- Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
- Android Studio 实现AIDL时在不能使用 aidl 目录下内容的解决方法
- 在Android studio里面使用AIDL
- ITelephony.aidl 在android studio中的使用
- CIFS与NFS
- 当Window遇到Mac OS出现Permission Denied/Could not expand时
- 高级产品经理教你如何进行用户画像及其应用场景
- java_day02_位运算符
- 如何卸载Eclipse安装的插件
- Android AIDL 使用 2 --在android studio中实现AIDL
- 自定义View以及自定义属性
- 16级长安大学ACM新生杯<第一次现场赛>
- cocos2dx C++使用rapidxml读取XML配置文件
- Mybatis的使用详解
- php中 判断变量 数组等数据 是否为空的方式
- 利用Eclipse创建maven项目并生成META-INF和WEB-INF目录
- 微信地理位置定位
- 重拾python 三十