aidl例子

2020-07-17  本文已影响0人  Android刘东

1.服务工程

1)new->aidl->
2)创建IMyAidlInterface 如:

interface IMyAidlInterface {
    /**
     * 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);
    String getName();
}

3)make project 编译一下 创建Service

public class MyService extends Service {

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return new MyBinder();
    }
    class MyBinder extends IMyAidlInterface.Stub{

        @Override
        public String getName() {
            return "test";
        }
    }
}

4)AndroidManifest.xml 添加service的action

        <service android:name=".aidl.MyService"
            android:enabled="true"
            android:exported="true">

            <intent-filter>
                <action android:name="com.github.xch168.plugindemo.aidl.MyService" />
            </intent-filter>
        </service>

2.客户端工程

1)把aidl文件复制下来 包名一模一样 编译下


public class MainActivity extends AppCompatActivity {
    IMyAidlInterface mIMyAidlInterface;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_plugin);
        bindService();
    }

        ServiceConnection mServiceConnection = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                mIMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);
                System.out.println("==="+mIMyAidlInterface.getName());
            }

            @Override
            public void onServiceDisconnected(ComponentName name) {

            }
        };

        void bindService() {
            Intent intent = new Intent();
            intent.setAction("com.github.xch168.plugindemo.aidl.MyService");
            //从 Android 5.0开始 隐式Intent绑定服务的方式已不能使用,所以这里需要设置Service 启动的模块,注意这个 是服务端的项目包名 而不是services的包名
            intent.setPackage("com.github.xch168.plugindemo");
            boolean flag = bindService(intent, mServiceConnection, BIND_AUTO_CREATE);
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            unbindService(mServiceConnection);
        }
}

完事 就是这么简单

上一篇下一篇

猜你喜欢

热点阅读