首页 > 解决方案 > 从系统服务调用方法

问题描述

Android 中存在无法从 Android Studio 引用的系统和自定义服务。可以说,我想从 PersistentDataBlockManager 服务调用 getFlashLockState() 方法。默认方法是添加服务引用。

import android.service.persistentdata.PersistentDataBlockManager;

将以下行写入代码将导致错误:Android Studio cannot resolve the symbol "PersistentDataBlockManager", as its default

android.service.*

不包含对持久数据服务的引用。我尝试使用反射来按名称获取类,并能够获得这样的参考:

Class<?> referenceClass = Class.forName("android.service.persistentdata.PersistentDataBlockManager");
Object referenceObject = referenceClass.newInstance();

但是实例化一个对象会引发错误:该类没有零参数构造函数。在检查了它的源代码后,我发现它唯一的构造函数是这样的:

public PersistentDataBlockManager(IPersistentDataBlockService service)

基本上,它只是一个接受系统库中类的实际实现的包装器。我还尝试使用其他类型的反射,例如:

context.getSystemService()

获取正在运行的服务的实际引用,但它们都不适合我,因为该类不是静态的,我无法找到获取其实例的方法。

是否有可靠的方法从非默认系统服务调用非静态方法?

标签: javaandroidandroid-studioreflectionandroid-service

解决方案


推荐阅读