对于Activity
source code,第398行(靠近底部):
/**
* @hide
*/
public final boolean isResumed() {
return mResumed;
}
@hide
是什么意思?
我发现我的public class ChildActivity extends Activity { ... }
不能使用/查看Activity.isResumed()
。这是正常的吗?我如何访问它?
发布于 2013-06-12 10:08:41
Android有两种无法通过SDK访问的API。
第一个位于package com.android.internal
中。第二个API类型是用@hide Javadoc attribute标记的类和方法的集合。
从Android9(API28级)开始,谷歌引入了new restrictions on the use of non-SDK interfaces,无论是直接、通过反射还是通过JNI。每当应用程序引用非SDK接口或尝试使用反射或JNI获取其句柄时,都会应用这些限制。
但是在API级别28之前,隐藏的方法仍然可以通过Java反射来访问。@hide
属性只是Javadoc (也包括droiddoc)的一部分,所以@hide
仅仅意味着方法/类/字段被排除在API文档之外。
例如,ActivityManager.java
中的checkUidPermission()
方法使用@hide
/** @hide */
public static int checkUidPermission(String permission, int uid) {
try {
return AppGlobals.getPackageManager()
.checkUidPermission(permission, uid);
} catch (RemoteException e) {
// Should never happen, but if it does... deny!
Slog.e(TAG, "PackageManager is dead?!?", e);
}
return PackageManager.PERMISSION_DENIED;
}
但是,我们可以通过反射来调用它:
Class c;
c = Class.forName("android.app.ActivityManager");
Method m = c.getMethod("checkUidPermission", new Class[] {String.class, int.class});
Object o = m.invoke(null, new Object[]{"android.permission.READ_CONTACTS", 10010});
https://stackoverflow.com/questions/17035271
复制相似问题