【问题标题】:Is there a way to access android.net.EthernetManager in an Android app?有没有办法在 Android 应用程序中访问 android.net.EthernetManager?
【发布时间】:2016-05-14 22:07:06
【问题描述】:

有没有办法在 Android 应用中访问android.net.EthernetManager? Class.forName("android.net.ethernet.EthernetManager") 和 Class.forName("android.net.EthernetManager") 都会生成 ClassNotFoundException。

【问题讨论】:

    标签: android ethernet


    【解决方案1】:

    似乎android.net.EthernetManager 是一个隐藏类,Javadoc 将其标记为@hide。可通过here定制的SDK平台访问,无需root设备。

    Android Hidden API library是一个修改过的jar文件,它结合了Android SDK的android.jar和真实设备的framework.jar。此 jar 使您能够在开发中使用 Android 内部/隐藏 API。

    什么是 Android 内部和隐藏 API? 内部 API 位于 com.android.internal 包中,该包在真实 Android 设备的 framework.jar 文件中可用,而隐藏 API 位于 android.jar 中具有@hide Javadoc 属性的文件。虽然类和方法是public,但是你不能访问它。您可以从此包中使用漂亮的方法和资源。我将假设这是一个 API,并将其称为隐藏 API。详细了解隐藏 API here

    那么,看看这个@hide 标记:

    此类在 API 级别 22 及更高级别上可用。但是,定制的 API 有局限性。 Android Hidden API 不适用于 Lollipop 5.1.1 (API 22) 和 Marshmallow 6.0 (API 23),因为我找不到任何拥有此设备的人。如果你有,请将framework.jar文件从位于/system/framework/framework.jar的物理设备上传到here。我会做一个新的!

    另一个限制

    我还没有解释隐藏 API 的另一个限制。当您通过此隐藏 API 使用某些功能、方法、资源或类时,这些功能、方法、资源或类仅在特定 API 级别可用,您的应用只能在相应设备的 API 级别内访问它们。例如,您在应用程序中使用android.net.EthernetManager,您必须将目标和编译SDK 设置为android-22(因为该类仅在API 级别22 及更高级别上可用)。在 API 级别 22 或更高级别的设备上运行应用程序后,不会显示任何错误。但是,一旦您在 API 级别 21 或更低级别运行应用程序,就会引发错误,例如 java.lang.NoClassDefFoundError,因为 android.net.EthernetManager 类仅针对 API 22 及更高级别构建。

    【讨论】:

    • 非常感谢。我会试一试,明天回来报告。
    • 我刚试过。我收到一个错误:java.lang.NoClassDefFoundError: android.net.EthernetManager。我想知道测试设备是否是 API 19,那么我必须使用 android-19。换句话说,如果我使用目标 API 19 构建应用程序,则该应用程序只能部署到 API 19 设备。你能澄清一下吗?
    • 谢谢。如何找出仅适用于哪个 API 的 API?通过查看代码,我无法确定 EthernetManager 仅适用于 API 22 及更高版本。
    • @Hong,只需在jcs.mobile-utopia.com/servlet/… 的搜索框中输入方法、资源或类即可。然后,查看 Category 列。
    • 这种情况的唯一解决方案是使用反射,并在调用getPermissionFlags()之前检查API级别。 Java 反射可以在这样的动态情况下使用。 @IrfanLatif
    【解决方案2】:

    IIRC 你只能在你的设备被植根的情况下这样做。

    这里有一个很好的解释:Ethernet Connectivity through Programatically (Android) (Rooted Device)

    【讨论】:

    • 感谢您的回答。我以前看过帖子。我在有根设备上的 getSystemService("ethernet") 为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2021-04-09
    • 2020-10-28
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多