问题标签 [aidl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1002 浏览

android - Android:相当于 onPause 的任务或应用程序

我的应用程序使用远程服务来播放音频。我这样做是为了让没有任何活动拥有音频的播放 - 用户可以触发一些音频从一个活动中播放,并且当他们在应用程序中导航时,音频将继续播放。但是,我确实想告诉服务在用户“卸载”应用程序时暂停或停止播放音频,方法是退出、锁定显示或点击主页。当应用程序是单个活动时,我在 onPause 中执行此操作。所以,我想我本质上是在应用程序/任务级别寻找“onPause”。这样的事情存在吗?如果不是,那么获得通知任务已被用户搁置的“最佳实践”方式是完全退出还是点击主页?

0 投票
3 回答
12837 浏览

android - 如何使用 SDK 示例代码从命令行使用 AIDL 工具?

我的问题涉及从命令行使用aidl.exe(在Windows系统上)。这个问题与Eclipse、Netbeans等无关。

Android SDK 包含以下三个 AIDL 定义文件:

IRemoteService.aidl IRemoteServiceCallback.aidl ISecondary.aidl

位于以下目录中:

C:\android-sdk-windows\platforms\android-2.1\samples\ApiDemos\src\com\example\android\apis\app

为了简单起见,我将aidl.exe复制到上面的目录中。然后,在控制台窗口中,我成功地使用了以下两个命令来生成 .java 文件:

C:\Android-project\ApiDemos\src\com\example\android\apis\app>aidl IRemoteServiceCallback.aidl C:\Android-project\ApiDemos\src\com\example\android\apis\app>aidl ISecondary.aidl

调用这些命令分别生成文件 IRemoteServiceCallback.java 和 ISecondary.java。到目前为止,一切都很好。

我注意到两个 .aidl 文件都很简单;它们不包括“导入”语句。

剩余的 .aidl 文件 IRemoteService.aidl 在第 19 行包含以下导入语句:

导入 com.example.android.apis.app.IRemoteServiceCallback;

当我在此文件上运行 AIDL 工具时出现问题:

这样做会导致在控制台窗口中打印以下错误消息:

IRemoteService.aidl:19:找不到类 com.example.android.apis.app.IRemoteServiceCallback 的导入

AIDL 工具显然无法在其运行的同一目录中找到 IRemoteServiceCallback.aidl 文件。根据 AIDL 工具的“使用”消息,有一个命令显然可以用来解决这个问题:

问题:我无法指定 -I 以避免出现错误消息,并让 AIDL 工具从 .aidl 文件中生成一个带有“import”语句的 .java 文件。(注意:我将 Windows 环境变量“路径”设置为当前目录。)以下是我尝试过的一些变体:

我一定错过了一些简单的东西。令人惊讶的是,即使我在不​​同的地方看到了这个问题的变体,我还没有看到关于 AIDL 命令行使用的答案或任何文档(除了aidl.exe USAGE 信息)。有人可以给我线索吗?

谢谢,马特

0 投票
3 回答
26145 浏览

android - Android - 在活动中使用服务中的方法?

我在我的应用程序中的服务中有以下方法:

所以我的问题是什么是能够在 Activity 中使用此方法的最佳和最有效的方法,如下所示

我必须做 AIDL 还是有更简单的方法?

0 投票
1 回答
1780 浏览

android - 启动 Activity 的 Service 与之通信的最佳方式

我有一个监听套接字的服务。当接收到某些输入时,它是创建一个活动。当接收到其他输入时,就是杀死这个activity。我一直在努力让服务通过 AIDL(http://developer.android.com/guide/developing/tools/aidl.html)与活动通信,但这似乎无效。我认为 AIDL 仅在要与之交谈的进程是服务而不是活动时才有效?我会喜欢一些关于如何解决我的问题的方向或建议。

干杯,

0 投票
3 回答
1848 浏览

java - Android - AIDL 生成文件导致警告?

我在我的 Android 项目中为 IPC 创建了一些aidl 文件。

他们编译并运行文件,但是在生成的 .java 文件中,我收到未使用导入的警告,如下所示:

现在我认为它们存在是有原因的,并且由于不应该修改生成的文件,因此添加抑制警告不是一个好主意?

那么如何摆脱这些警告呢?我知道它们可以留下,它不会影响项目的运行,但我想要一个尽可能干净的项目,所以如果它完全有可能消除这个错误,我想知道该怎么做。

谢谢

0 投票
3 回答
1361 浏览

android - 无法绑定到服务

我有一个定义如下的aidl文件:

服务是:

而必须绑定到服务的Activity是:package com.erbedo.callalert;

未调用 onServiceConnected。我错过了一些明显的东西吗?

0 投票
3 回答
2543 浏览

android - AIDL:未调用存根类方法

我正在使用 AIDL 将对象从 Activity 传递给 Service,并且出现了一些奇怪的行为。据我了解,AIDL 背后的想法是在 .aidl 文件中创建一个接口,然后 android 将在动态生成的类中(部分)实现该接口。Android 将创建一个名为 Stub 的抽象类,然后您需要实例化并添加您在 .aidl 接口中定义的方法的实现。一旦所有这些都准备就绪,就可以实例化远程服务,并且可以调用在 .aidl 接口文件中声明的方法(并在您的 Stub 类的实例中定义)。

这就是我对这种机制如何工作的印象,但是当我尝试实现它时,我注意到我在 Stub 类中声明的方法的定义没有运行;相反,正在运行的是 IBinder.transct()

这是我正在尝试做的一个片段:

这是在我的服务中实现的:

这是在我的 Activity 中,它尝试使用该服务并与之对话:

INetService.Stub 中定义的方法,如 sendString,似乎永远不会被调用;显然我错过了一些东西;有什么想法吗?

非常感谢!

伊娃

0 投票
3 回答
4104 浏览

android - 来自另一个线程的回调导致异常

我正在尝试创建一个简单的多人游戏。有一个WorkerService应该处理所有网络通信,并且此服务与我的活动之间的所有交互都是使用 AIDL 完成的。我认为这是一种标准方法——为了实现双向交互,我还使用了一个IWorkerCallback接口(也是 AIDL)。

问题是回调必须改变 UI 中的东西,这可能只能在 UI 线程中完成。我创建了一个Handler(在 UI 线程中)并相信这是一个明显的解决方案。但是,令人惊讶的是,它不起作用。

我的接口LoungeActivity调用startServer()方法。IWorker我的相应方法WorkerService做了一些工作并进行了回调 - 这很好用。然后WorkerService产生一个新线程并从该线程回调导致抛出一个错误的异常:

Can't create handler inside thread that has not called Looper.prepare()

这里有一些代码可以清楚地说明:

startServer()执行:

ServerThread代码:

每个方法callback看起来都是这样的:

在处理程序的handleMessage()方法中,我正在做一个简单的switch(msg.what),并且在每种情况下都有一个简单的 UI 修改(显示 Toast,更改文本等)。

我不知道为什么会抛出这个异常。我已经设法通过将代码打包到 aRunnable并调用来修复它,runOnUiThread()但它仍然让我很好奇 - 处理程序不应该总是在创建它的线程中运行吗?或者也许我做错了什么?

0 投票
1 回答
1308 浏览

android - 如何在整个活动中传递远程接口(aidl)?

我正在使用服务和远程接口开发应用程序。

我有一个关于在整个活动中传递我的远程接口的引用的问题。

在我的第一个活动中,我将我的服务与我的活动绑定,以便获得对我使用的界面的引用

x 是对我的界面的引用。现在我想从另一个活动中访问这个界面,我看到了两种方法,但我不知道哪一种是“正确”的方法:

  • 当我调用新 Activity 时以我的意图传递 x
  • this.bindService(new Intent(y.this,z.class), mConnection, Context.BIND_AUTO_CREATE);在我的新活动的 onCreate() 中重做

你会建议我做什么?

0 投票
1 回答
1489 浏览

android - Android远程服务不调用服务方法

我正在android上开发一个GPS跟踪软件。我需要 IPC 来控制来自不同活动的服务。所以我决定用 AIDL 开发一个远程服务。这不是一个大问题,但现在它总是运行到接口的方法中,而不是我的服务类的方法中。也许有人可以帮助我?

这是我的 AIDL 文件:

这里是我的服务类的简短版本:

为了更方便地从客户端访问,我编写了一个 ServiceManager 类,它设置了 ServiceConnection,您可以调用服务方法。这是我的代码:

如果我现在尝试从一个活动中调用一个方法,例如 start(trackId) 什么都不会发生。绑定没问题。调试时,它总是运行到生成的 ITrackingServiceRemote.java 文件中的 startTracking() 中,而不是我的 TrackingService 类中。问题出在哪里?我找不到任何问题。

提前致谢!

托拜厄斯