のためにActivity
ソースコード、3898行目(一番下近く):
/**
* @hide
*/
public final boolean isResumed() {
return mResumed;
}
どういう@hide
意味?
public class ChildActivity extends Activity { ... }
が使用できない/表示されないことがわかりましたActivity.isResumed()
。これは正常ですか? どうすればアクセスできますか?
ベストアンサー1
Android には、SDK 経由でアクセスできない 2 種類の API があります。
最初のものはパッケージにありますcom.android.internal
。2番目の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});