【问题标题】:android aidl import安卓助手导入
【发布时间】:2012-05-31 01:30:56
【问题描述】:

我正在尝试将 android.content.Context 导入 AIDL 文件,但 eclipse 无法识别它..

这是我的代码:

package nsip.net;

import android.content.Context; // error couldn't find import for class ...

interface IMyContactsService{

void printToast(Context context, String text);

}

谁能帮帮我?

【问题讨论】:

    标签: android import aidl


    【解决方案1】:

    使用android.content.Context 是行不通的,因为它没有实现android.os.Parcelable

    但是 - 如果你有一个类(例如MyExampleParcelable)你想在一个 AIDL 接口中传输(& 它实际上实现了Parcelable)你创建一个.aidl 文件,MyExampleParcelable.aidl 你在其中写:

    package the.package.where.the.class.is;
    
    parcelable MyExampleParcelable;
    


    现在,除非您非常想跨进程交谈,否则您应该考虑本地服务。

    编辑(稍微更有帮助):

    这是一个本地服务(即它只会在你自己的应用程序和进程中使用)?在这些情况下,通常最好实现一个活页夹并直接返回它。

    public class SomeService extends Service {
        ....
        ....
        public class SomeServiceBinder extends Binder {
            public SomeService getSomeService() {
                return SomeService.this;
            }
        }
    
        private final IBinder mBinder = new SomeServiceBinder();
    
        @Override
        public IBinder onBind(Intent intent) {
            return mBinder;
        }
    
        public void printToast(Context context, String text) {
            // Why are you even passing Context here? A Service can create Toasts by it self.
            ....
            ....
        }
        // And all other methods you want the caller to be able to invoke on
        // your service.
    }
    

    基本上,当Activity 绑定到您的服务时,它会简单地将生成的IBinder 转换为SomeService.SomeServiceBinder,调用SomeService.SomeServiceBinder#getSomeService() - 和bang ,访问正在运行的Service 实例+你可以在它的API中调用东西。

    【讨论】:

    • 我将声明对象 Parcelable 的aidl 文件命名为与类名不同的名称,因为 Android Studio 抱怨aidl 文件与现有的文件同名创建提示中的类(新建 -> AIDL 文件)。我花了几个小时遇到同样的错误!声明对象 Parcelable 的文件需要与对象具有完全相同的名称。
    • @Waffles 对于我的测试,这可能是 Android Studio 的错误。我创建了一个不同名称的 AIDL 文件,但仍然错误。所以,最后,我使用 Refactor => Rename 将名称更改为与我们的 Parcelable java 文件相同的名称。 而且,它有效! 注意:当我们想在我们的项目中使用 Parcelable 文件时,我们需要导入 AIDL 文件
    • 我发现的另一个提示是:为什么类 android.graphics.Point 也只是实现 Parcelable ,但如果我们在 AIDL 中使用它。我们不需要导入它吗?所以,我用文件名 "Point" 搜索 Android 源文件,并得到一个文件 Point.aidl 。这就是原因。 Google 帮助我们编写 Point 的 AIDL 文件,在将 Point.java 编译到我们的项目中时,Android Studio auto 帮助我们导入它
    • 当我为 parcelable 类创建 AIDL 文件时,我收到另一个错误:interface Event should be declared in a file called com/zkteco/android/core/Event.aidl。我之前也对其进行了编译,而无需为 parcelable 类创建单独的 AIDL 文件。你只需要导入它并在 AIDL 接口上声明它是 parcelable 。
    猜你喜欢
    • 2015-10-09
    • 2014-04-27
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多