如何导入android.os.SystemProperties?

6

我想使用

SystemProperties.get();

我无法导入android.os.SystemProperties包,经过一番搜索,发现它是隐藏的。有没有什么解决方法呢?


2
试着阅读这个问题:https://dev59.com/LHE85IYBdhLWcg3wvGAR - thepoosh
这里的解决方案怎么样:https://dev59.com/8GvXa4cB1Zd3GeqPH1Bo - MMJ
6个回答

11

SystemProperties是一个隐藏的类,仅限平台级别代码使用。你可以尝试通过反射来访问它,但这并不被推荐。

很容易将Android的SystemProperties类与旧式Java属性处理方式混淆,即java.lang.System.getProperty()。请注意,这两个是完全独立的系统。一个重要的区别是,Java机制仅在给定进程内工作,而Android的SystemProperties跨进程工作。

作为应用程序开发者,虽然你通常无法获得基于Java的API访问Android的SystemProperties,但可以使用命令行检查SystemProperties

adb shell getprop

2
你可以导入import android.os.Bundle;,然后使用System.getProperty("os.name");来访问系统属性。

你可以通过使用System.getProperty('属性名称')来访问任何属性。


SystemProperties.get(); 我仍然无法使用它,但是我能够使用你写的 System.getProperty("os.name"); - Sunny Kumar Aditya
1
你可以使用 System.getProperties(); 来访问所有属性。 - Anil Jadhav
获取特定属性:使用System.getProperties().getProperty()。 - Cesar Maiorino
2
这对我不起作用。adb shell getprop 显示“wifi.interface”属性设置为 wlan0,但 System.getProperty("wifi.interface") 为空。 - Josh
不确定现在是否仍然有效... - Amine Zaine

0

0
将'layoutlib.jar'添加到您的项目的Java构建路径中,然后您可以使用“import android.os.SystemProperties;”。

你能提供一下layoutlib.jar的链接吗? - Milad Faridnia
这个链接可能会有帮助:http://www.java2s.com/Code/Jar/l/Downloadlayoutlibapi2220jar.htm - Milad Faridnia

0
你可以尝试的一件事是,在Android.mk中注释掉以下代码:

LOCAL_SDK_VERSION := current

这样,你就可以从应用程序中调用隐藏的API了。

-1

一个巧妙的方法是在类路径上创建自己的SystemProperties类,以便您的代码可以编译和工作,然后从构建中排除它。如果该类存在于Android设备上,则可以正常工作。我经常为非常特定的情况这样做,但我不建议在商业应用程序中使用,因为涉及各种版本和设备。

您可以基于源代码类,并只保留您需要的API。

示例类:

package android.os;

public class SystemProperties {

    public static String get(String key) {
        return "";
    }

}

然后你只需要在gradle文件中从你的android/sourcesets/main中排除那个类,例如:

sourceSets {
    main {
        java {
            exclude 'android/**/*.java'
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接