对于Activity
源代码,第3898行(靠近底部):
/**
* @hide
*/
public final boolean isResumed() {
return mResumed;
}
什么@hide
意思
我发现我public class ChildActivity extends Activity { ... }
无法使用/查看Activity.isResumed()
。这正常吗?我该如何访问?
Android有两种类型的API,无法通过SDK访问。
第一个位于package中com.android.internal
。第二种API类型是用@hide Javadoc属性标记的类和方法的集合。
从Android 9(API级别28)开始,Google对非SDK接口的使用引入了新的限制,无论是直接,通过反射还是通过JNI。每当应用程序引用非SDK接口或尝试使用反射或JNI获取其句柄时,就会应用这些限制。
但是在API级别28之前,仍可以通过Java反射访问隐藏的方法。该@hide
属性只是Javadoc的一部分(也是droiddoc),因此@hide
仅表示方法/类/字段已从API文档中排除。
例如,中的checkUidPermission()
方法ActivityManager.java
使用@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});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句