設定アプリはgetPackageSizeInfo
という方法を使用します。残念ながら、このメソッドは@hide
という注釈が付けられているため非表示になっています。このため、メソッドを直接使用することはできませんが、リフレクションを使用して呼び出す必要があります。あなたはこのようにそれを使用することができます
package android.content.pm;
import android.content.pm.PackageStats;
/**
* API for package data change related callbacks from the Package Manager.
* Some usage scenarios include deletion of cache directory, generate
* statistics related to code, data, cache usage(TODO)
* {@hide}
*/
oneway interface IPackageStatsObserver {
void onGetStatsCompleted(in PackageStats pStats, boolean succeeded);
}
その後:
AndroidManifest.xml
にこの権限を追加します。
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
はAIDLインターフェイスIPackageStatsObserver
を作成しますが
private void getPackageSizeInfo(Context context, String packageName) {
try {
PackageManager packageManager = context.getPackageManager();
Method getPackageSizeInfo = packageManager.getClass().getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
getPackageSizeInfo.invoke(packageManager, packageName, new IPackageStatsObserver.Stub() {
public void onGetStatsCompleted(PackageStats packageStats, boolean succeeded) throws RemoteException {
long totalCacheSize = packageStats.cacheSize + packageStats.externalCacheSize;
long totalDataSize = packageStats.dataSize + packageStats.externalDataSize;
long totalCodeSize = packageStats.codeSize + packageStats.externalCodeSize;
long totalSize = totalDataSize + totalCodeSize;
Log.d(TAG, "Total Size:" + totalSize);
Log.d(TAG, "App Size:" + totalCodeSize);
Log.d(TAG, "Data Size:" + totalDataSize);
Log.d(TAG, "Cache Size:" + totalCacheSize);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
このaidlファイルを追加しようとすると、次のようになります。エラー:タスク ':app:compileDebugAidl'の実行に失敗しました。 > java.lang.RuntimeException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:プロセス 'コマンド' C:\ Users \ CM \ AppData \ Local \ Android \ sdk \ build -tools \ 23.0.3 \ aidl.exe ''非ゼロ終了値1で終了その他の補助ファイルは動作します –
okは動作していますhttp://stackoverflow.com/questions/28791461/ipackagestatsobserver-cannot-be-resolved -to-a-type-android –
いいえ、使用する必要がある隠しメソッドは 'getPackageSizeInfo'なので、例は正しいです。 –