java - 从系统服务调用方法
问题描述
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()
获取正在运行的服务的实际引用,但它们都不适合我,因为该类不是静态的,我无法找到获取其实例的方法。
是否有可靠的方法从非默认系统服务调用非静态方法?
解决方案
推荐阅读
- android - 谷歌地图多边形填充颜色因几何形状不正确而消失
- visual-studio-2010 - 模板 MVC 3 在 Visual Studio 2010 中不起作用
- c# - 如何在 Visual Studio 中配置方法的摘要注释
- javascript - 使用 JavaScript 和 ViewModel 在 Asp.NET MVC 5 应用程序中发布数据
- android - 在xamarin表单android中未附加到窗口管理器崩溃的视图
- asp.net-mvc - 如何在 razor-engine 中的 ModelMetadata 对象上设置 DisplayFormatString 属性?
- angularjs - AngularJS 可以将用户路由到内存中同一视图的同一实例吗?
- java - 如何在不重新加载窗口的情况下单击按钮时在 JSP 中进行更新查询?
- mysql - 对多个内部联接进行分组
- jmeter - 无法在 Windows 10 64 位中使用 jdk 版本 1.8.0.45 访问 Jarfile ApacheJMeter.jar Errorlevel=1