所以在4.3中有一个系统应用程序的概念.放入的APK /system/app被授予系统权限.从4.4开始,有一个新的"特权应用程序"概念.特权应用程序存储在/system/priv-app目录中,似乎有不同的对待.如果你查看下面的AOSP源代码PackageManagerService,你会看到新的方法,如
static boolean locationIsPrivileged(File path) {
try {
final String privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app")
.getCanonicalPath();
return path.getCanonicalPath().startsWith(privilegedAppDir);
} catch (IOException e) {
Slog.e(TAG, "Unable to access code path " + path);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以这里是一个不同的情况的例子.
public final void addActivity(PackageParser.Activity a, String type) {
...
if (!systemApp && intent.getPriority() > 0 && "activity".equals(type)) {
intent.setPriority(0);
Log.w(TAG, "Package " + a.info.applicationInfo.packageName + " has activity "
+ a.className + " with priority > 0, …Run Code Online (Sandbox Code Playgroud) 我在应用程序中使用
setWifiApEnabled()
Run Code Online (Sandbox Code Playgroud)
来自隐藏API(通过反射访问).它在一些较旧的手机上工作(还有三星Galaxy S3,有些手机有4.4,......)但我用三星Galaxy S5测试了它,我得到了
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
...
Run Code Online (Sandbox Code Playgroud)
我正在使用类似的代码,如Android 2.2 wifi热点API或如何设置为Android WifiConfiguration.preSharedKey连接到WPA2 PSK WiFi网络,但这是一个旧的代码.
你有经验吗?你有什么建议?
PS它在某些Android 4.4设备中也不起作用(但我没有得到InvocationTargetException).