美文网首页
AIDL在Android studio里的写法

AIDL在Android studio里的写法

作者: veneno94 | 来源:发表于2019-08-12 17:50 被阅读0次

1.AIDL跨进程通信,先定义两个进程app1,app2

1.app1里 先定义一个service 在AndroidManifest.xml里注册 如下:

<service
            android:name=".MyService"
            android:exported="true">
            <intent-filter>
                <action android:name="com.lypeer.aidl" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
 </service>

public class MyService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mIMyAidlInterface;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        return super.onStartCommand(intent, flags, startId);
    }

    private IMyAidlInterface.Stub mIMyAidlInterface = new IMyAidlInterface.Stub() {
        @Override
        public String getName() throws RemoteException {
            return "test";
        }

        @Override
        public User getUser() throws RemoteException {
            return new User("xuelei");
        }
    };
}

2.app1里继续 在main下面创建个aidl文件夹,aidl下面创建个和包名一样的文件夹 ,里面放aidl格式的文件,

package com.example.lenovo.myapplication;

// Declare any non-default types here with import statements
import com.example.lenovo.myapplication.User;

interface IMyAidlInterface {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    String getName();

    User getUser();
}

//这是第二个文件
package com.example.lenovo.myapplication;
parcelable User;

3.app1里创建java类user

public class User implements Parcelable {

    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
    }

    protected User(Parcel in) {
        this.name = in.readString();
    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            return new User(source);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };
}

4.App2里 ,把app1的aidl的文件夹全部拷贝过来 包括app1的包名 要一模一样,在app2的java文件夹下新建app1包名的目录,里面放数据类user类,也是从app1里直接拷贝过来

5.app2里 直接用bindService调用 通过intent隐式

public class MainActivity extends AppCompatActivity {

    private IMyAidlInterface mIMyAidlInterface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = new Intent();

        intent.setAction("com.lypeer.aidl");
        intent.setPackage("com.example.lenovo.myapplication");

        bindService(intent, new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                mIMyAidlInterface = IMyAidlInterface.Stub.asInterface(iBinder);
            }

            @Override
            public void onServiceDisconnected(ComponentName componentName) {

            }
        }, BIND_AUTO_CREATE);

      findViewById(R.id.textview).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    if (mIMyAidlInterface != null) {
                        User user = mIMyAidlInterface.getUser();
                        Toast.makeText(MainActivity.this, user.getName(), Toast.LENGTH_SHORT).show();
                    }

                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

6.代码目录格式如图


微信图片_20190812175250.png

相关文章

  • AIDL在Android studio里的写法

    1.AIDL跨进程通信,先定义两个进程app1,app2 1.app1里 先定义一个service 在Androi...

  • Android studio 下AIDL使用

    AIDL是android app进行进程间通信的一种简单方法,本文正对在Android studio下建立AIDL...

  • Android studio中AIDL的创建

    在android studio中创建aidl,直接在module上单击右键,选择新建AIDL,则会module的目...

  • Android-AIDL使用

    AIDL使用,多进程内的多线程情况 1、在src的main目录下创建AIDL文件夹,Android studio ...

  • Android AIDL与proxy,stub

    1.简单使用 利用android studio开发aidl还是非常方便的,建立一个aidl的后缀文件,在servi...

  • Android AIDL

    通过此文记录以下自己在使用AIDL时的一些理解。在Android Studio中首先定义.aidl文件: 紧接着M...

  • Android AIDL 从入门到精通

    AIDL 是 Android 特有的 IPC 进程间通讯方式 AIDL 的写法其实和绑定服务的代码差不多,IBan...

  • AIDL代码案例

    环境 开发工具:Android studio 整体的文件目录 server端编写 1、在Java那边新建aidl文...

  • VC++6.0运行多个工程

    IDE 到android studio 3.5以后,AIDL中不能有中文注释否则会有问题

  • AndroidStudio 无法引用eclipse中导出的jar

    在eclipse中导出jar包,jar包里面包含了aidl文件,然后在android studio中引用该jar包...

网友评论

      本文标题:AIDL在Android studio里的写法

      本文链接:https://www.haomeiwen.com/subject/vytpjctx.html