[AS 2.1.3开发实践] 安卓AIDL的使用
来源:互联网 发布:mac什么输入法最好用 编辑:程序博客网 时间:2024/06/06 01:27
最近公司的项目需要用到第三方app访问自己的软件获取数据,开始使用内容提供者,后面需要判断哪些app才可以获取,而内容提供者可是所有第三方都允许的。所以只能换了,后面在同事那边知道了AIDL就找了些资料,看了下都是以前的EC版本的,也有一篇AS的。我看了下实现了功能,就放出来当个笔记了。
参考的文章
1.在需要分享出信息的软件里面创建AIDL文件。
之后命令生成一个XXXX.AIDL文件
删掉里面自带的方法。添加自己需要的方法
我添加了两个String的方法 一个用来获取name 一个用来获取pwd
interface GetInformationManager { String getName(String packname); String getPwd(String packname);}我里面要求传参数 是为了做一些判断而已,用来判断允许哪些第三方软件可以访问我的数据
这之后请clean或者rebuild你的项目,为了让AS生成相对应的JAVA文件
没错之后再进行下一步。
生成的位置如下
2.创建一个自己的服务来实现AIDL的方法
代码:
/** * Created by Administrator on 2016/11/2. */public class GIMService extends Service{ private final GetInformationManager.Stub manager = new GetInformationManager.Stub() { @Override public String getName(String packname) throws RemoteException { return Tools.username; } @Override public String getPwd(String packname) throws RemoteException { return Tools.userpwd; } }; @Nullable @Override public IBinder onBind(Intent intent) { return manager; }}由于测试,我就没在get的两个方法里面添加判定。
3.在AndroidManifest.xml文件里面添加服务即可
代码:
<service android:name="com.ffcs.aidl.GIMService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.GIMService" /> </intent-filter> </service>至此,自己的软件 设置算是完全完成了。
在下面是 第三方软件需要加入的东西设置了。
1.将自己软件里面新建出来的xxx.AIDL文件拷贝出来,让第三方软件放进自己的软件。
拷贝的话建议是把整个aidl文件夹拷贝到第三方软件内。
放的位置:
拷贝完成后还是需要clean或者rebuild你的项目,为了让AS生成相对应的JAVA文件
没错后就可以进行下一步了。
2.在需要调用的地方开启服务
设置了一个新的test项目在主界面加入了一个按钮
布局图如下
代码如下
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!mBound){ startService(); Toast.makeText(MainActivity.this,"服务正在重连",Toast.LENGTH_SHORT).show(); return; } if (manager == null) return; try { String name = manager.getName(""); String pwd = manager.getPwd(""); Log.e("账号",name); Log.e("密码",pwd); } catch (RemoteException e) { e.printStackTrace(); } } }); } private void startService(){ Intent intent = new Intent(); intent.setAction("android.intent.action.GIMService"); intent.setPackage("com.ffcs.stb"); bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStart() { super.onStart(); if (!mBound){ startService(); } } @Override protected void onStop() { super.onStop(); if (mBound){ unbindService(mServiceConnection); mBound = false; } } private GetInformationManager manager = null; //默认未连接服务 private boolean mBound = false; private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { manager = GetInformationManager.Stub.asInterface(service); mBound = true; } @Override public void onServiceDisconnected(ComponentName name) { mBound = false; } };}至此第三方的项目就可以获取数据了。
运行结果如下:
最后说下注意点吧。
1. 5.0之后隐式Intent 需要设置活动和包名,不然会错误
2. 创建和拷贝.AIDL文件之后需要重建下项目 不然不会生成相应的JAVA文件,导致写服务一直点不出来
3. 还有就是 需要你软件开启之后,第三方软件才可以获取服务从而获取数据
最后是,我直接用项目写的,源码可能就没办法发了!
- [AS 2.1.3开发实践] 安卓AIDL的使用
- 安卓开发之安卓AIDL的使用
- 安卓开发 As使用SVN
- 使用AS开发AIDL程序(1)
- 安卓开发之SearchView的实践使用
- 安卓的AIDL总结
- 安卓开发 As插件解放双手
- 安卓aidl的简单实现教程
- 安卓Service组件使用系列6:使用AIDL完成两个进程间的通信
- AS开发AIDL程序(2)
- 【Android杂谈】安卓开发必需了解 -AIDL(一)
- 安卓AIDL的简单使用 (复杂情况下,在此基础扩展)
- 安卓使用aidl实现两个程序之间的数据交换
- 安卓开发:活动的最佳实践3--启动活动的最佳写法
- 安卓IPC之aidl使用(一)--aidl常见使用
- Android开发之AIDL的使用
- Android应用开发----AIDL的使用
- 安卓跨进程通信之AIDL使用入门
- LeetCode 392. Is Subsequence 题解
- POI解析1997-2003、2007版本excel
- IceGrid搭建--继承IceBox.Service版
- OpenJudge noi6262流感传染
- 在Fragment中申请运行时权限onRequestPermissionsResult收不到数据
- [AS 2.1.3开发实践] 安卓AIDL的使用
- linux搭建git服务器
- SAP ABAP MM常用数据库表
- 如何在Spring Boot项目使用参数校验
- 愿我成为一名优雅的程序媛
- mvp下rxjava+retrofit的登录网络请求demo
- HDU 2476 String painter(区间DP)
- eclipse中的.project 和 .classpath文件的具体作用
- ReactNative Animated.view的用法