Android AIDL自动生成Java文件测试

/********************************************************************************
 *                                 Android AIDL自动生成Java文件测试
 * 说明:
 *     知道有aidl这东西已经挺久了,但是一直没有花时间来系统了解一下其工作机制,现在
 * 花点时间一点一点验证一下其功能。
 *
 *                                                 2016-5-8 深圳 南山平山村 曾剑锋
 *******************************************************************************/

一、参考文章:
    1. Android AIDL使用详解
        http://blog.csdn.net/stonecao/article/details/6425019
    2. android进程间通信:使用AIDL
        http://blog.csdn.net/saintswordsman/article/details/5130947

二、cat forService.aidl
    package com.example.aidltest.aidl;

    import com.example.aidltest.aidl.forActivity;

    interface forService {
        void registerTestCall(forActivity cb);
        void invokCallBack();
    }

三、cat forService.java
    /*
     * This file is auto-generated.  DO NOT MODIFY.
     * Original file: D:\\soft\\Android\\workspace\\AidlTest\\src\\com\\example\\aidltest\\aidl\\forService.aidl
     */
    package com.example.aidltest.aidl;

    // 继承了android.os.IInterface接口
    public interface forService extends android.os.IInterface {
        /** Local-side IPC implementation stub class. */
        // Stub类继承了Binder,并继承我们在aidl文件中定义的接口
        public static abstract class Stub extends android.os.Binder implements
                com.example.aidltest.aidl.forService {
            private static final java.lang.String DESCRIPTOR = "com.example.aidltest.aidl.forService";

            /** Construct the stub at attach it to the interface. */
            public Stub() {
                this.attachInterface(this, DESCRIPTOR);
            }

            /**
             * Cast an IBinder object into an com.example.aidltest.aidl.forService
             * interface, generating a proxy if needed.
             */
            // 在使用的时候经常会看到这一部分的内容
            public static com.example.aidltest.aidl.forService asInterface(
                    android.os.IBinder obj) {
                if ((obj == null)) {
                    return null;
                }
                android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
                if (((iin != null) && (iin instanceof com.example.aidltest.aidl.forService))) {
                    return ((com.example.aidltest.aidl.forService) iin);
                }
                return new com.example.aidltest.aidl.forService.Stub.Proxy(obj);
            }

            @Override
            public android.os.IBinder asBinder() {
                return this;
            }

            @Override
            public boolean onTransact(int code, android.os.Parcel data,
                    android.os.Parcel reply, int flags)
                    throws android.os.RemoteException {
                switch (code) {
                case INTERFACE_TRANSACTION: {
                    reply.writeString(DESCRIPTOR);
                    return true;
                }
                case TRANSACTION_registerTestCall: {
                    data.enforceInterface(DESCRIPTOR);
                    com.example.aidltest.aidl.forActivity _arg0;
                    _arg0 = com.example.aidltest.aidl.forActivity.Stub
                            .asInterface(data.readStrongBinder());
                    this.registerTestCall(_arg0);
                    reply.writeNoException();
                    return true;
                }
                case TRANSACTION_invokCallBack: {
                    data.enforceInterface(DESCRIPTOR);
                    this.invokCallBack();
                    reply.writeNoException();
                    return true;
                }
                }
                return super.onTransact(code, data, reply, flags);
            }

            private static class Proxy implements
                    com.example.aidltest.aidl.forService {
                private android.os.IBinder mRemote;

                Proxy(android.os.IBinder remote) {
                    mRemote = remote;
                }

                @Override
                public android.os.IBinder asBinder() {
                    return mRemote;
                }

                public java.lang.String getInterfaceDescriptor() {
                    return DESCRIPTOR;
                }

                @Override
                public void registerTestCall(
                        com.example.aidltest.aidl.forActivity cb)
                        throws android.os.RemoteException {
                    android.os.Parcel _data = android.os.Parcel.obtain();
                    android.os.Parcel _reply = android.os.Parcel.obtain();
                    try {
                        _data.writeInterfaceToken(DESCRIPTOR);
                        _data.writeStrongBinder((((cb != null)) ? (cb.asBinder())
                                : (null)));
                        mRemote.transact(Stub.TRANSACTION_registerTestCall, _data,
                                _reply, 0);
                        _reply.readException();
                    } finally {
                        _reply.recycle();
                        _data.recycle();
                    }
                }

                @Override
                public void invokCallBack() throws android.os.RemoteException {
                    android.os.Parcel _data = android.os.Parcel.obtain();
                    android.os.Parcel _reply = android.os.Parcel.obtain();
                    try {
                        _data.writeInterfaceToken(DESCRIPTOR);
                        mRemote.transact(Stub.TRANSACTION_invokCallBack, _data,
                                _reply, 0);
                        _reply.readException();
                    } finally {
                        _reply.recycle();
                        _data.recycle();
                    }
                }
            }

            static final int TRANSACTION_registerTestCall = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
            static final int TRANSACTION_invokCallBack = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
        }

        // AIDL中自定义的方法,没有实现
        public void registerTestCall(com.example.aidltest.aidl.forActivity cb)
                throws android.os.RemoteException;

        public void invokCallBack() throws android.os.RemoteException;
    }

四、cat MainActivity.java
    public class MainActivity extends ActionBarActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        ......
        new forService.Stub() {

                @Override
                public void registerTestCall(forActivity cb) throws RemoteException {
                    // TODO Auto-generated method stub

                }

                @Override
                public void invokCallBack() throws RemoteException {
                    // TODO Auto-generated method stub

                }
            };
        ......
        }
    }

 

时间: 2024-10-28 06:31:56

Android AIDL自动生成Java文件测试的相关文章

android ndk adt自动生成头文件问题。

问题描述 android ndk adt自动生成头文件问题. android ndk adt自动生成头文件时候,在项目src目录下打开cmd.运行javah加adt复制的方法包名,为什么提示找不到com.zhhd.simplejni.MainActivity的类文件.在bin/classes也不行.怎么办,卡在这么个地方太闹心了 解决方案 javah -classpath . -jni 这里点表示当前路径.

Myeclipse自动生成java的Bean和BeanName.hbm.xml文件(java项目必须支持Hibernate)

在javaEE开发中,我们在支持Hibernate之后,想使用Myeclipse自动生成java的Bean和BeanName.hbm.xml文件(Oracle12c为例): 注:以下提到"BeanName"为您使用的java class name. 1:创建一个java项目让他支持Hibernate(因为需要给后面生成的bean找一个存放目录) 2:切换视图到MyEclipse Hibernate,如图: 3:在空白处点击新建(New...),创建一个新的数据库连接,如图: 注: Or

Android开发中R.java文件丢失或无法更新的解决方法

本文分析了Android开发中R.java文件丢失或无法更新的解决方法.分享给大家供大家参考,具体如下: 首先确定你的SDK是新的. 其次接下来检查你的.xml文件,文件名不能大写. 如果xml文件太多 ,那么clean一下你的项目,这时候注意看Console的提示. Console会提示你xml文件错误在哪里 修改完xml文件之后 clean你的项目,再build你的项目 R.java会重新出现或更新 Android 在开发中会自动生成一个 R.java 文件 ,这个文件是自动生成的,最好不要

根据MIDlet套件自动生成jad文件

我们经常遇到有jar文件但是却没有jad文件的情况,这时候如果你想使用模拟器来运行恐怕麻烦一些.当然你可以根据jar文件中的Manifest.mf文件,自己手写jad文件.需要注意的是自己手写的时候一定不能忽略如下两个参数:MIDlet-Jar-Size和MIDlet-Jar-URL. 互联网上也有一些工具可以根据jar文件自动生成jad文件.下面我们使用java来实现一个简单的jad文件生成器.解决这个问题的关键在于使用java.util.jar包提供的api解析jar包,然后将其Manife

Eclipse不自动编译java文件的解决方法

最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般是如下几个步骤.但是还是不自动编译. 最基本的解决办法--这是前提 然后clean和refresh下项目.如果这样还是不行,用下面的方法吧,终极解决方案...... 1:去除项目中的jre的classpath 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.

Wix 安装部署(一)同MSBuild 自动生成打包文件

原文:Wix 安装部署(一)同MSBuild 自动生成打包文件       因为项目需要,最近在研究Wix打包部署,园子里也有一些关于wix的博客,方方面面,讲的点各不同.我自己也在测试过程中,写下过程,以供参考.最新版本WiX Toolset v3.7,如何安装的就不说了,可以参考 http://blog.csdn.net/rryqsh/article/details/8274832         打包关心的问题有 1).Net版本检查  2)桌面和菜单栏的快捷方式 3)更换图标画面,进度条

myeclipse 2014创建动态网站的时候不能自动生成 xml文件,是需要自己创建一个吗?

问题描述 myeclipse 2014创建动态网站的时候不能自动生成 xml文件,是需要自己创建一个吗? 2013就会自动生成..xml文件是必要的吗...书上说用 myeclipse可以不用管xml,可是那用什么路径访问啊 解决方案 一般创建web工程后会自动创建web.xml的;如果没有的话,在创建web项目时有个窗口有个生成web.xml的项你要勾选上才会生成这个的; 如果还是没有的话,就手动在目录下创建一个就行了: 如果回答对您有帮助,请采纳 解决方案二: 解决方案三: web.xml对

Eclipse不自动编译java文件的终极解决方法_java

最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般是如下几个步骤.但是还是不自动编译. 最基本的解决办法--这是前提   然后clean和refresh下项目.如果这样还是不行,用下面的方法吧,终极解决方案...... 1:去除项目中的jre的classpath       2:在将jre的包添加到classpath中来   OK,大功告成!再出现

win7电脑打开浏览器自动生成TEMP文件夹怎么办

  1.在Win7系统上点击IE浏览器,然后在IE浏览器上点击"工具"-"Internet选项";   2.然后在internet选项窗口上,切换至"常规"选项卡中,然后点击历史记录处的"设置"按钮;   3.历史浏览记录窗口上,查看历史浏览记录和临时文件目录是否指向桌面Desktop文件夹,可以重新设置别的文件夹为系统默认文件夹; 4.点击"移动文件夹"按钮,来浏览临时文件夹,再点击确定按钮保存. 按照上