android-两个应用程序之间的AIDL接口

我用AIDL接口卡住了整个墙.我有一个必须通过第三方应用程序控制的应用程序(我对此有足够的控制权,所以我可以要求他们将我需要的东西实施到他们的活动中)

最初,我的应用程序也是一个包含界面和所有内容的活动,但我将其更改为后台服务,并且为了进行测试,我创建了一个虚拟应用程序,该应用程序设法将服务应用程序启动到后台.

现在,我想一种从服务请求方法调用方法(主要是;启动,停止,sendData).我已经为两个应用程序创建了.aidl文件. aidl文件仅实现一种方法(这是这里其他问题的礼貌.)

package foo.testapp;
interface IScript 
{
     String executeScript(String script); 
}

而其他的帮助是相同的,除了包是“ foo.otherapp”.我在网上找到的实现对于两个aidl文件都具有相同的软件包,但是对我来说,这会导致错误(猜测这对我来说只是个问题,因为我讨厌名称空间和软件包,因此如果对改变他们,我可以做到)

计划是使用此方法将字符串发送到服务,并且只是切换预定义的字符串以调用正确的方法(如果可以改善用法,也可以只实现三种不同的方法).

无论如何…我无法连接助手,出现错误“无法启动服务意图

{act=foo.testapp.IScript } : not found

我想这与我的误解有关.软件包名称左右)

这是我的测试活动应用程序中的实现

private final IScript.Stub mBinder = new IScript.Stub()
{
    @Override
    public String executeScript(String script) throws remoteexception
    {
        // Todo Auto-generated method stub
    }
};
IScript mService = null;
private ServiceConnection mConnection = new ServiceConnection() 
{
     public void onServiceConnected(ComponentName className, IBinder service) 
     {
         mService = IScript.Stub.asInterface(service);
     }
     public void onServicedisconnected(ComponentName className) 
     {
         mService = null;
     }
 };

然后在OnCreate()方法中执行以下操作:

bindService(new Intent(IScript.class.getName()),
            mConnection, Context.BIND_AUTO_CREATE);

在服务班里我有这个.

@Override
public IBinder onBind(Intent intent) 
{
    // Select the interface to return.  If your service only implements
    // a single interface, you can just return it here without checking
    // the Intent.
    if (IScript.class.getName().equals(intent.getAction())) 
    {
        return mBinder;
    }
    return null;
}

/**
 * The IRemoteInterface is defined through IDL
 */
private final IScript.Stub mBinder = new IScript.Stub() 
{
    @Override
    public String executeScript(String script) throws remoteexception 
    {
        if (script == "test")
        {
            return "foo";
        }
        return "fail";
    }
};

最后是清单文件

好吧,实际上,我不知道在处理艾滋病时是否必须在清单文件添加一些内容.在一个例子中,我看到了这一点;

    <intent-filter>
        <action android:name="foo.otherapp.IScript" />
    </intent-filter>

    <intent-filter>
        <action android:name="foo.testapp.IScript" />
    </intent-filter>

我猜这些错误可能在任何地方.我一直在尝试用口香糖和创可贴来设置它.猜猜我只是误解了一些基本概念.

无论如何,欢迎任何帮助.

提前致谢!

解决方法:

因为找到了确切的解决方案,所以我决定回答自己的问题.

My Life With Android

只需复制源代码并正确更改程序包名称函数名称即可完成所有工作(假设您正在自己的项目中实现此功能)

来自客户端文件夹的源转到客户端活动,而serviceimpl进入服务.我不需要“服务活动”,因此我将其遗漏了(无论如何似乎都没有真正调用它).

我没有足够的声誉来发布多个链接,所以您可以从页面顶部获取源.

“Update: please check out the updated example program for Android SDK 1.5.”

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...