android studio 中使用aidl
2015-11-22 00:58
411 查看
据官方消息,从2015年年底google不再支持eclipse adt 的更新,为了跟上大家的步伐,小编最近也在尝试使用android studio开发android,但是as有许多使用方式是跟eclipse是不同的,尤其是aidl的使用,这个问题困扰我半天。
一、首先是as中添加了可以直接新建aidl文件的功能,但是也有一点让人头疼的事就是:它不像eclipse一样只要刷新一下就可以在gen目录下自动生成.java文件,as中aidl文件是这样创建的:
1、通过右击app->new->aidl:
2、会在app下生成一个aidl文件(此时aidl下的包名一定要跟manifest.xml下的应用包名一致,默认是一致的):
3、接下来废话不多说,让大家看看我的源码:
MyAIDL.aidl
MyService
这样远程服务就完成了,我当时看了许多as中如何使用aidl的博客,好多就此结束了,有的虽然有使用aidl文件,但是没有清楚的将如何在另一个project中使用,下面关键的时候到了:
3、就是在第二个project中用上述(1)方法建立一个aidl文件,但是包名默认与当前项目的报名一致,而且无法修改(这个很蛋疼),于是我的办法就是在将默认的包删除(大家如果有更好的方法,欢迎分享出来),然后自己新建一个包,包名与之前第一个project包名(即包含远程service的project的包名)相同,这样直接将第一个project中的MyService.aidl文件拷贝到该包下即可(因为我的demo中用的名字是MyService.aidl)如图:
4、接下来便是第二个project中的代码了
“`
public class MainActivity extends Activity {
}
一、首先是as中添加了可以直接新建aidl文件的功能,但是也有一点让人头疼的事就是:它不像eclipse一样只要刷新一下就可以在gen目录下自动生成.java文件,as中aidl文件是这样创建的:
1、通过右击app->new->aidl:
2、会在app下生成一个aidl文件(此时aidl下的包名一定要跟manifest.xml下的应用包名一致,默认是一致的):
3、接下来废话不多说,让大家看看我的源码:
MyAIDL.aidl
interface MyAIDL { /** * 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); boolean callMethod(int money); }
MyService
public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { Log.i("aa","onBind"); return new MyBinder(); } @Override public void onCreate() { Log.i("aa","onCreate"); super.onCreate(); } @Override public void onDestroy() { Log.i("aa","onDestroy"); super.onDestroy(); } public boolean method(int money){ if(money > 5000){ Log.i("aa","pay success"); return true; }else{ Log.i("aa","pay failed"); return false; } } private class MyBinder extends MyAIDL.Stub { @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } @Override public boolean callMethod(int money) throws RemoteException { return method(money); } } }
这样远程服务就完成了,我当时看了许多as中如何使用aidl的博客,好多就此结束了,有的虽然有使用aidl文件,但是没有清楚的将如何在另一个project中使用,下面关键的时候到了:
3、就是在第二个project中用上述(1)方法建立一个aidl文件,但是包名默认与当前项目的报名一致,而且无法修改(这个很蛋疼),于是我的办法就是在将默认的包删除(大家如果有更好的方法,欢迎分享出来),然后自己新建一个包,包名与之前第一个project包名(即包含远程service的project的包名)相同,这样直接将第一个project中的MyService.aidl文件拷贝到该包下即可(因为我的demo中用的名字是MyService.aidl)如图:
4、接下来便是第二个project中的代码了
“`
public class MainActivity extends Activity {
private MyAIDL myAIDL; private MyConn conn; private Intent service; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); service = new Intent(); service.setAction("com.xiaohua.android.bb"); service.setPackage("com.xiaohua.android.alipayservice"); } @Override protected void onDestroy() { unbindService(conn); super.onDestroy(); } public void click(View v){ switch (v.getId()){ case R.id.start: startService(service); break; case R.id.bind: conn = new MyConn(); bindService(service, conn,BIND_AUTO_CREATE); break; case R.id.call: try { if(myAIDL.callMethod(500)){ Toast.makeText(this, "支付成功", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(this,"支付失败",Toast.LENGTH_LONG).show(); } } catch (RemoteException e) { e.printStackTrace(); } break; } } private class MyConn implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { myAIDL = MyAIDL.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { } }
}
相关文章推荐
- android 蓝牙开发
- Android自定义ScrollView实现一键置顶功能
- Android的材料设计兼容库(Design Support Library)
- android直接读取数据库文件
- android 5.0 -- Activity 过渡动画
- Android ADB命令大全
- android studio 运行Failure [INSTALL_FAILED_OLDER_SDK]
- Android 开发之ViewPage官方文档学习笔记
- Android ViewHolder的工具类,ListView超简洁写法
- ubuntu14.04编android2.3.1的一些坑
- 使用NDK构建android程序
- 浅谈Android Service
- 国内镜像下载Android源码
- Android 中的adapter和作用以及常见的adapter
- Android Activity转场动画
- 读Android蓝牙通信源码
- android Listview显示不同的item遇到的问题
- 第二章 安装Android开发环境
- 第一章 Android平台简介
- Android——真机无线调试