Aidl 通过Service实现

来源:互联网 发布:sql语句中isnull 编辑:程序博客网 时间:2024/05/21 19:27

1.如果传递自定义类可能会产生的异常 couldn't find import class

2.创建aidl文件

Article.Java 自定义类,注意实现Parceable接口,且放到java之中aidl文件夹

,Article.aidl

package com.sclgxt.aidl;// Declare any non-default types here with import statementsimport com.sclgxt.aidl.Article;  parcelable Article;
IMyAidlInterface.adil
package com.sclgxt.aidl;// Declare any non-default types here with import statementsimport com.sclgxt.aidl.Article;interface IMyAidlInterface {     Article getFirstNovel();}
3.Service
public class AidlService extends Service {    @Nullable    @Override    public IBinder onBind(Intent intent) {        return new MyAidlStuBinder();
//正常返回    }    
    //注意继承    private class MyAidlStuBinder extends IMyAidlInterface.Stub {        @Override        public Article getFirstNovel() throws RemoteException {            try {                Article article = Utils.getDbManager(getApplication()).findFirst(Article.class);
                //这里只是获取Article数据而已                return article;            } catch (DbException e) {                e.printStackTrace();                return null;            }        }    }}
3.1注册
<service android:name=".Service.AidlService"    android:exported="true">    <intent-filter>        <action android:name="com.sclgxt.action.remoteadilservice"/>    </intent-filter></service>

4.在其他程序中使用
4.1创建包,把Article,和IMyAidlInterface.aidl 生成的IMyAidlInterface.java 拷贝到此包里面
4.2使用
serviceConnection = new ServiceConnection() {    @Override    public void onServiceConnected(ComponentName name, IBinder service) {        IMyAidlInterface stub = IMyAidlInterface.Stub.asInterface(service);        try {            Article article = stub.getFirstNovel();            Log.i("","-->article:  "+article.toString());        } catch (RemoteException e) {            e.printStackTrace();        }    }    @Override    public void onServiceDisconnected(ComponentName name) {        Log.i("","-->onServiceDisconnected");    }};Intent intent = new Intent("com.sclgxt.action.remoteadilservice");bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE);
注意unbind

0 0