小编nbe*_*_42的帖子

如何解决库冲突(apache commons-codec)

我的Android库有问题.

我想使用库org.apache.commons.codec.binary.Hex(版本1.6)中的Hex.encodeHexString(字节数组)方法

在我的Android平台(SDK 2.3.1)上,commons-codec库版本1.3已经存在但该方法在此版本中尚不存在(只有encodeHex()).

我将版本1.6的jar库添加到我的Eclipse项目中(到/ libs目录中)但是当我在Emulator上运行项目时,我得到了这个:

E/AndroidRuntime(1632): FATAL EXCEPTION: main
E/AndroidRuntime(1632): java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Hex.encodeHexString
Run Code Online (Sandbox Code Playgroud)

我如何指出操作系统在哪里是好的库?

我在Mac OS X上使用Eclipse Juno和Java 1.6.0

抱歉我的英文不好,并提前致谢!

编辑:我的问题可以用jarjar工具显然解决. http://code.google.com/p/google-http-java-client/issues/detail?id=75

有人可以帮我使用这个工具吗?我不知道如何创建Ant Manifest或jar文件.

谢谢

apache android conflict nosuchmethoderror apache-commons-codec

7
推荐指数
1
解决办法
8182
查看次数

Android在没有可展开视图的状态栏中显示通知

我需要帮助才能做点什么.我尝试在android状态栏中显示通知.

它将通知用户正在与服务器进行同步.

现在,我使用此代码,它工作正常:

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setSmallIcon(android.R.drawable.stat_notify_sync).setWhen(System.currentTimeMillis())
            .setAutoCancel(false).setOngoing(true);

    NotificationManager nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notif = builder.getNotification();
    nm.notify(1, notif);
Run Code Online (Sandbox Code Playgroud)

唯一的问题是当用户展开状态栏时会创建一个视图.我想要做的只是在状态栏的顶部显示一个小图标,没有内容视图.

谁知道怎么做?提前致谢!

notifications android statusbar

6
推荐指数
1
解决办法
9282
查看次数

当应用程序从空闲状态返回时,Android 服务未重新启动

我已将我的应用程序升级到 API 26,但我在新的后台执行限制方面遇到了一些问题。

在奥利奥设备上,只要我的应用程序进入后台,我的应用程序就会由于日志中写入的空闲状态而被操作系统停止:

Stopping service due to app idle: u0a80 com.example.test/com.example.test.service1
Stopping service due to app idle: u0a80 com.example.test/com.example.test.service2
Run Code Online (Sandbox Code Playgroud)

然后,我尝试再次启动我的应用程序,并正确恢复了最后一个活动(包括其片段和显示的所有数据)

07-16 10:21:51.253 system_process I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.test/com.example.test.activity1 bnds=[317,1159][586,1508]} from uid 10024
Run Code Online (Sandbox Code Playgroud)

问题是我的服务没有重新启动。

它们都在 onStartCommand 中返回 START_STICKY ,它应该告诉操作系统该服务应该在被杀死后重新启动,因为它是文档中的状态:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)

从 onStartCommand(Intent, int, int) 返回的常量:如果此服务的进程在启动时被终止(从 onStartCommand(Intent, int, int) 返回后),则将其保留在已启动状态但不要保留此传递的意图。稍后系统将尝试重新创建该服务。

知道我做错了什么吗?

是否可以在不显式调用 startService 或 bindService 方法的情况下恢复服务?

service android background android-8.0-oreo

6
推荐指数
1
解决办法
3225
查看次数

通过 AIDL 在服务之间传递活动对象

我正在尝试为不同包中的多个服务共享一个公共对象。每个服务必须调用相同的对象。

例如,服务 A(来自 APK A)实例化一个自定义对象,我希望服务 B 和 C(来自 APK B 和 C)检索该对象的引用并调用它的某些方法。

我在 Android 参考中发现使用Parcel应该是可能的:

活动对象

Parcel 的一个不同寻常的功能是能够读取和写入活动对象。对于这些对象,不写入对象的实际内容,而是写入引用该对象的特殊标记。从 Parcel 读回对象时,您不会获得该对象的新实例,而是一个对最初写入的完全相同对象进行操作的句柄。有两种形式的活动对象可用。

Binder 对象是 Android 通用跨进程通信系统的核心工具。IBinder 接口描述了一个带有 Binder 对象的抽象协议。任何这样的接口都可以写入 Parcel 中,在阅读时,您将收到实现该接口的原始对象或一个特殊的代理实现,该代理实现将回调通信回原始对象。使用的方法有 writeStrongBinder(IBinder), writeStrongInterface(IInterface), readStrongBinder(), writeBinderArray(IBinder[]), readBinderArray(IBinder[]), createBinderArray(), writeBinderList(List), readBinderList(List), createBinderArrayList() .

我试图通过 AIDL 传递我的对象(扩展绑定器)来做到这一点,但没有任何效果,当我尝试从方法 createFromParcel(Parcel in) 检索引用时,我总是得到 ClassCastException。

我的代码示例:

public class CustomObject extends Binder implements Parcelable {

  public CustomObject() {
    super();
  }

  public static final Parcelable.Creator<CustomObject> CREATOR = new Parcelable.Creator<CustomObject>() {
  public CustomObject createFromParcel(Parcel in) {
    IBinder i = in.readStrongBinder(); …
Run Code Online (Sandbox Code Playgroud)

android aidl android-service android-binder

5
推荐指数
1
解决办法
6338
查看次数