AIDL创建

  1. 新建Aidldemo项目

  2. 选中APP-右键-new-AIDL-AIDL file

    会出现一个aidl目录,但是注意此时还没有生成对应的java文件,如下图所示

  3. 点击Build-Clean Project(Rebuild 也可以),aidl对应的java文件就会出现了

写个加法计算器

  • 更改aidl目录下的aidl文件如下:

    interface IAdditionService {    int add(in int x, in int y);}
  • 在MainActivity同级目录下,创建一个Service

    更改代码如下:

    public class AdditionService extends Service {    public AdditionService() {    }    @Override    public IBinder onBind(Intent intent) {        // TODO: Return the communication channel to the service.        return mBinder;    }    IAdditionService.Stub mBinder = new IAdditionService.Stub() {        @Override        public int add(int x, int y) throws RemoteException {            return x + y;        }    };}
  • 写个简单的布局,输入两个加数,点击按钮相加,并输出结果

    ```            
    • 修改MainActivity的代码
    public class MainActivity extends AppCompatActivity {    IAdditionService mService;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });        Intent intentService = new Intent(this,AdditionService.class);        bindService(intentService, mConnection, Context.BIND_AUTO_CREATE);    }    ServiceConnection mConnection = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            mService = IAdditionService.Stub.asInterface(service);        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };    public void add(View view) throws RemoteException {        EditText et1 = (EditText) findViewById(R.id.et_num1);        EditText et2 = (EditText) findViewById(R.id.et_num2);        TextView tv = (TextView) findViewById(R.id.tv);        int x = Integer.parseInt(et1.getText().toString());        int y = Integer.parseInt(et2.getText().toString());        int result = mService.add(x, y);        tv.setText(result +"");    }}
  • 结果

新建另一个项目,来启动这个远程服务

新建StartAdd 项目,在该项目启动Aidldemo中的加法服务,布局照抄上面那个项目

不过这个项目因为没有Service的类,所以要在之前的那个项目中,加上隐式启动服务的过滤器

注意:该项目新建的aidl要和之前项目的aidl包名以及文件内容要一模一样,所以这时不能右键新建AIDL file了(因为,这样默认的包名是当前项目的包名,和之前的aidl的文件的package是不符的)。因此要:

  • 新建一个包,名字和上面项目Aidl所在的包名一致
  • 把上面那个项目的aidl文件直接拷到这个包里面
  • Clean Project ,自动生成相应的java文件

修改MainActivity:

public class MainActivity extends AppCompatActivity {    IAdditionService mService;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });        Intent intent = new Intent();        intent.setAction("com.guanhang.add");        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);    }    ServiceConnection mConnection = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            mService = IAdditionService.Stub.asInterface(service);        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };    public void add(View view) throws RemoteException {        EditText et1 = (EditText) findViewById(R.id.et_num1);        EditText et2 = (EditText) findViewById(R.id.et_num2);        TextView tv = (TextView) findViewById(R.id.tv);        int x = Integer.parseInt(et1.getText().toString());        int y = Integer.parseInt(et2.getText().toString());        int result = mService.add(x, y);        tv.setText(result +"");    }}

运行结果:

更多相关文章

  1. 在Windows7上用Android(安卓)Studio编译Tensorflow_Android_Demo
  2. 关于Android(安卓)Studio无法查看详细的源代码问题解决
  3. Android(安卓)Package Name vs. Application ID
  4. Android(安卓)内部存储安装apk文件实现
  5. 【原创】The Error in Android(安卓)developing
  6. Android(安卓)webview最简单小例子
  7. Android(安卓)Camera HAL浅析
  8. 在Android(安卓)Studio中使用Android-PullToRefresh Library
  9. android 简单试题系统

随机推荐

  1. 【小米招聘]】Android系统软件测试工程师
  2. 使用Jenkins自动构建Android问题总结
  3. 【Android Developers Training】 2. 运
  4. Android ViewPager+Fragment 实现画廊效
  5. android:自定义actionbar样式和布局
  6. 郭霖公众号的文章连接
  7. Android多线程分析之三:Handler,Looper的实
  8. android 点击重新加载界面设计
  9. Android 9.0 ART编译分析(三)-虚拟机触发de
  10. android异步下载mp3文件