android.content.pm.PackageStats#android.content.pm.IPackageStatsObserver源码实例Demo

下面列出了android.content.pm.PackageStats#android.content.pm.IPackageStatsObserver 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
@UnsupportedAppUsage
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    final String msg = "Shame on you for calling the hidden API "
            + "getPackageSizeInfoAsUser(). Shame!";
    if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) {
        throw new UnsupportedOperationException(msg);
    } else if (observer != null) {
        Log.d(TAG, msg);
        try {
            observer.onGetStatsCompleted(null, false);
        } catch (RemoteException ignored) {
        }
    }
}
 
源代码2 项目: AndroidGodEye   文件: AppSizeUtil.java
/**
 * 获取应用大小8.0以下
 */
@SuppressWarnings("JavaReflectionMemberAccess")
private static void getAppSizeLowerO(Context context, @NonNull final OnGetSizeListener listener) {
    try {
        Method method = PackageManager.class.getMethod("getPackageSizeInfo", String.class,
                IPackageStatsObserver.class);
        // 调用 getPackageSizeInfo 方法,需要两个参数:1、需要检测的应用包名;2、回调
        method.invoke(context.getPackageManager(), context.getPackageName(), new IPackageStatsObserver.Stub() {
            @Override
            public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) {
                AppSizeInfo ctAppSizeInfo = new AppSizeInfo();
                ctAppSizeInfo.cacheSize = pStats.cacheSize;
                ctAppSizeInfo.dataSize = pStats.dataSize;
                ctAppSizeInfo.codeSize = pStats.codeSize;
                listener.onGetSize(ctAppSizeInfo);
            }
        });
    } catch (Throwable e) {
        listener.onError(e);
    }
}
 
源代码3 项目: MemoryCleaner   文件: CleanerService.java
@Override public void onCreate() {
    try {
        mGetPackageSizeInfoMethod = getPackageManager().getClass()
                                                       .getMethod(
                                                               "getPackageSizeInfo",
                                                               String.class,
                                                               IPackageStatsObserver.class);

        mFreeStorageAndNotifyMethod = getPackageManager().getClass()
                                                         .getMethod(
                                                                 "freeStorageAndNotify",
                                                                 long.class,
                                                                 IPackageDataObserver.class);
        mDeleteApplicationCacheFiles = getPackageManager().getClass()
                                                          .getMethod(
                                                                  "deleteApplicationCacheFiles",
                                                                  String.class,
                                                                  IPackageDataObserver.class);
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
}
 
源代码4 项目: FileManager   文件: SysCacheScanTask.java
@Override
protected Void doInBackground(Void... params) {
    mCallBack.onBegin();

    if (isCancelled()) {
        mCallBack.onCancel();
        return null;
    }

    PackageManager pm = App.getAppContext().getPackageManager();
    List<ApplicationInfo> installedPackages = pm.getInstalledApplications(PackageManager.GET_GIDS);

    IPackageStatsObserver.Stub observer = new PackageStatsObserver();
    mTotalCount = installedPackages.size();
    mSysCaches = new ArrayList<>();
    mAppNames = new HashMap<>();

    for (int i = 0; i < mTotalCount; i++) {
        ApplicationInfo info = installedPackages.get(i);
        mAppNames.put(info.packageName, pm.getApplicationLabel(info).toString());
        getPackageInfo(info.packageName, observer);
    }

    mIsOverTime = false;
    return null;
}
 
源代码5 项目: CleanExpert   文件: SysCacheScanTask.java
@Override
protected Void doInBackground(Void... params) {
    mCallback.onBegin();
    PackageManager pm = MyApplication.getInstance().getPackageManager();
    List<ApplicationInfo> installedPackages = pm.getInstalledApplications(PackageManager.GET_GIDS);

    IPackageStatsObserver.Stub observer = new PackageStatsObserver();

    mScanCount = 0;
    mTotalCount = installedPackages.size();
    mSysCaches = new ArrayList<>();
    mAppNames = new HashMap<>();

    for (int i = 0; i < mTotalCount; i++) {
        ApplicationInfo info = installedPackages.get(i);
        mAppNames.put(info.packageName, pm.getApplicationLabel(info).toString());
        getPackageInfo(info.packageName, observer);
    }

    return null;
}
 
@Override
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    try {
        mPM.getPackageSizeInfo(packageName, userHandle, observer);
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}
 
@Override
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    final String msg = "Shame on you for calling the hidden API "
            + "getPackageSizeInfoAsUser(). Shame!";
    if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) {
        throw new UnsupportedOperationException(msg);
    } else if (observer != null) {
        Log.d(TAG, msg);
        try {
            observer.onGetStatsCompleted(null, false);
        } catch (RemoteException ignored) {
        }
    }
}
 
@Override
public void getPackageSizeInfo(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    try {
        mPM.getPackageSizeInfo(packageName, userHandle, observer);
    } catch (RemoteException e) {
        // Should never happen!
    }
}
 
@Override
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    final String msg = "Shame on you for calling the hidden API "
            + "getPackageSizeInfoAsUser(). Shame!";
    if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) {
        throw new UnsupportedOperationException(msg);
    } else if (observer != null) {
        Log.d(TAG, msg);
        try {
            observer.onGetStatsCompleted(null, false);
        } catch (RemoteException ignored) {
        }
    }
}
 
@Override
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    final String msg = "Shame on you for calling the hidden API "
            + "getPackageSizeInfoAsUser(). Shame!";
    if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) {
        throw new UnsupportedOperationException(msg);
    } else if (observer != null) {
        Log.d(TAG, msg);
        try {
            observer.onGetStatsCompleted(null, false);
        } catch (RemoteException ignored) {
        }
    }
}
 
@Override
public void getPackageSizeInfo(String packageName,
                               IPackageStatsObserver observer) {
    try {
        mPM.getPackageSizeInfo(packageName, observer);
    } catch (RemoteException e) {
        // Should never happen!
    }
}
 
@Override
public void getPackageSizeInfo(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    try {
        mPM.getPackageSizeInfo(packageName, userHandle, observer);
    } catch (RemoteException e) {
        // Should never happen!
    }
}
 
@Override
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    final String msg = "Shame on you for calling the hidden API "
            + "getPackageSizeInfoAsUser(). Shame!";
    if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) {
        throw new UnsupportedOperationException(msg);
    } else if (observer != null) {
        Log.d(TAG, msg);
        try {
            observer.onGetStatsCompleted(null, false);
        } catch (RemoteException ignored) {
        }
    }
}
 
@Override
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    try {
        mPM.getPackageSizeInfo(packageName, userHandle, observer);
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}
 
@Override
public void getPackageSizeInfoAsUser(String packageName, int userHandle,
        IPackageStatsObserver observer) {
    final String msg = "Shame on you for calling the hidden API "
            + "getPackageSizeInfoAsUser(). Shame!";
    if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.O) {
        throw new UnsupportedOperationException(msg);
    } else if (observer != null) {
        Log.d(TAG, msg);
        try {
            observer.onGetStatsCompleted(null, false);
        } catch (RemoteException ignored) {
        }
    }
}
 
源代码16 项目: styT   文件: MainActivity.java
private void getCaches() {
    // scan
    pm = getPackageManager();
    List<PackageInfo> packages = pm.getInstalledPackages(0);

    int max = packages.size();
    int current = 0;
    sb.delete(0, sb.length());
    sb.append("");
    sb.append("本机一共安装了:").append(max).append("个应用");
    tvShowCaches.setText(sb.toString());
    for (PackageInfo pinfo : packages) {
        String packageName = pinfo.packageName;
        try {

            Method getPackageSizeInfo = PackageManager.class
                    .getDeclaredMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
            getPackageSizeInfo.invoke(pm, packageName, new MyPackageStateObserver());
            current++;
        } catch (Exception e) {
            current++;
            e.printStackTrace();
        }

    }
    //===到这里,数据准备完成
    mHadler.postDelayed(new Runnable() {
        @Override
        public void run() {
            btnClearAll.setVisibility(View.VISIBLE);
            Toast.makeText(getApplicationContext(), "已读取全部缓存", Toast.LENGTH_SHORT).show();
            sbCache.append(Formatter.formatFileSize(getApplicationContext(), cacheS)).append("\n");
            tvShowCaches.setText(sb.toString());
            tvAppCache.setText(sbCache.toString());
            sbCache.delete(0, sbCache.length());
        }
    }, 1000);
    //ok,所有应用程序信息显示完成
}
 
源代码17 项目: stynico   文件: MainActivity.java
private void getCaches(){
    // scan
    pm = getPackageManager();
    List<PackageInfo> packages = pm.getInstalledPackages(0);

    int max = packages.size();
    int current = 0;
    sb.delete(0, sb.length());
    sb.append("");
    sb.append("本机一共安装了:" + max+"个应用");
    tvShowCaches.setText(sb.toString());
    for (PackageInfo pinfo : packages) {
        String packageName = pinfo.packageName;
        try {

            Method getPackageSizeInfo = PackageManager.class
                    .getDeclaredMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
            getPackageSizeInfo.invoke(pm, packageName, new MyPackageStateObserver());
            current++;
        } catch (Exception e) {
            current++;
            e.printStackTrace();
        }

    }
    //===到这里,数据准备完成
    mHadler.postDelayed(new Runnable() {
        @Override
        public void run() {
btnClearAll.setVisibility(View.VISIBLE);
            Toast.makeText(getApplicationContext(),"已读取全部缓存",Toast.LENGTH_SHORT).show();
            sbCache.append(Formatter.formatFileSize(getApplicationContext(),cacheS)+"\n");
            tvShowCaches.setText(sb.toString());
            tvAppCache.setText(sbCache.toString());
            sbCache.delete(0,sbCache.length());
        }
    }, 1000);
    //ok,所有应用程序信息显示完成
}
 
源代码18 项目: AndroidDemo   文件: StorageActivity.java
private void getAppSize() {
        boolean flag = false;
        try {
            PackageManager.class.getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
            flag = true;
        } catch (NoSuchMethodException e) {
            try {
                PackageManager.class.getMethod("getPackageSizeInfo", String.class, int.class, IPackageStatsObserver.class);
                flag = true;
            } catch (NoSuchMethodException ee) {
                flag = false;
            }
        }
//        Method[] methods = PackageManager.class.getMethods();
//        for (Method m : methods) {
//            if ("getPackageSizeInfo".equals(m.getName())) {
//                Class<?>[] classes = m.getParameterTypes();
//                if (classes.length == 2 || classes.length == 3) {
//                    flag = true;
//                    break;
//                }
//            }
//        }
        if (flag) {
            useIPackageStatsObserver();
        } else {
            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
                getStorageWith_7_1();
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                getStorageWith_8();
            }
        }
    }
 
源代码19 项目: MemoryCleaner   文件: AppsPresenter.java
@Override public void onCreate(Bundle savedInstanceState) {
    //position = mContext.getArguments().getInt(ARG_POSITION);
    try {
        mGetPackageSizeInfoMethod = mContext.getPackageManager()
                                            .getClass()
                                            .getMethod("getPackageSizeInfo",
                                                    String.class,
                                                    IPackageStatsObserver.class);
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
    //mTaskScanApps = new TaskScanApps();
    //mAppsView.initViews(mAppsListAdapter,mContext,);
}
 
源代码20 项目: MobileGuard   文件: AppManagerEngine.java
/**
 * get app size by package name
 * @param context
 * @param packageName package name
 * @param listener it will be call when success to get size
 */
public static void getAppSize(Context context, String packageName, final AppSizeInfoListener listener) {
    // check argument
    if(null == listener) {
        throw new NullPointerException("listener can't be null");
    }
    if(TextUtils.isEmpty(packageName)) {
        throw  new IllegalArgumentException("packageName can't be empty");
    }

    // get pm
    PackageManager pm = context.getPackageManager();
    Method getPackageSizeInfo = null;
    try {
        // get method getPackageSizeInfo
        getPackageSizeInfo = pm.getClass().getMethod(
                "getPackageSizeInfo",
                String.class, IPackageStatsObserver.class);
        // call method
        getPackageSizeInfo.invoke(pm, packageName,
                new IPackageStatsObserver.Stub() {
                    @Override
                    public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
                            throws RemoteException {
                        // call listener
                        listener.onGetSizeInfoCompleted(
                                new AppSizeInfo(pStats.cacheSize, pStats.dataSize, pStats.codeSize));
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }

}
 
源代码21 项目: android-cache-cleaner   文件: CleanerService.java
@Override
public void onCreate() {
    try {
        mGetPackageSizeInfoMethod = getPackageManager().getClass().getMethod(
                "getPackageSizeInfo", String.class, IPackageStatsObserver.class);

        mFreeStorageAndNotifyMethod = getPackageManager().getClass().getMethod(
                "freeStorageAndNotify", long.class, IPackageDataObserver.class);
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
}
 
源代码22 项目: condom   文件: PackageManagerWrapper.java
/** @hide */
@Override public void getPackageSizeInfoAsUser(String packageName, int userId, IPackageStatsObserver observer) {
	mBase.getPackageSizeInfoAsUser(packageName, userId, observer);
}
 
源代码23 项目: condom   文件: PackageManagerWrapper.java
/** @hide */
@Override public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) {
	mBase.getPackageSizeInfo(packageName, observer);
}
 
源代码24 项目: MiPushFramework   文件: PackageManagerWrapper.java
/** @hide */
@Override public void getPackageSizeInfoAsUser(String packageName, int userId, IPackageStatsObserver observer) {
	mBase.getPackageSizeInfoAsUser(packageName, userId, observer);
}
 
源代码25 项目: MiPushFramework   文件: PackageManagerWrapper.java
/** @hide */
@Override public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) {
	mBase.getPackageSizeInfo(packageName, observer);
}
 
源代码26 项目: android-cache-cleaner   文件: CleanerService.java
@Override
protected List<AppsListItem> doInBackground(Void... params) {
    mCacheSize = 0;

    final List<ApplicationInfo> packages = getPackageManager().getInstalledApplications(
            PackageManager.GET_META_DATA);

    publishProgress(0, packages.size());

    final CountDownLatch countDownLatch = new CountDownLatch(packages.size());

    final List<AppsListItem> apps = new ArrayList<>();

    try {
        for (ApplicationInfo pkg : packages) {
            mGetPackageSizeInfoMethod.invoke(getPackageManager(), pkg.packageName,
                    new IPackageStatsObserver.Stub() {

                        @Override
                        public void onGetStatsCompleted(PackageStats pStats,
                                                        boolean succeeded)
                                throws RemoteException {
                            synchronized (apps) {
                                publishProgress(++mAppCount, packages.size());

                                mCacheSize += addPackage(apps, pStats, succeeded);
                            }

                            synchronized (countDownLatch) {
                                countDownLatch.countDown();
                            }
                        }
                    }
            );
        }

        countDownLatch.await();
    } catch (InvocationTargetException | InterruptedException | IllegalAccessException e) {
        e.printStackTrace();
    }

    return new ArrayList<>(apps);
}