android - PackageManager反射方法时,报 java.lang.NoSuchMethodException:错误?
天蓬老师
天蓬老师 2017-04-17 16:44:32
0
2
790
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(2)
小葫芦

在Android4.2以上版本中,PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)不可用,改为PackageManager.getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer), 至于增加的参数userHandle的解释是:The user whose size information should be retrieved。下面是PackageManager内部的用法:

public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) {  
    getPackageSizeInfo(packageName, UserHandle.myUserId(), observer);  
} 

最后更改为:

private void getPacakgeStats(String pkgName) {  
    if (pkgName != null) {  
        try {  
            Method getPackageSizeInfo = mPm.getClass().getDeclaredMethod("getPackageSizeInfo", String.class,  
                    int.class, IPackageStatsObserver.class);  
            /** 
             * after invoking, PkgSizeObserver.onGetStatsCompleted() will be called as callback function. <br> 
             * About the third parameter ‘Process.myUid() / 100000’,please check: 
             * <android_source>/frameworks/base/core/java/android/content/pm/PackageManager.java: 
             * getPackageSizeInfo(packageName, UserHandle.myUserId(), observer); 
             */  
            getPackageSizeInfo.invoke(mPm, pkgName, Process.myUid() / 100000, new PkgSizeObserver());  
        } catch (Exception e) {  
            Log.e(TAG, e.toString());  
        }  
    }  
}  

测试后,可用。
通过查阅资料,其中Process.myUid() / 100000的解释为:

表示多用户中的某一个用户,因为一个用户装的apk可以有100000个,用uid表示,uid/100000的商就是某个特定的用户id也叫userId或者userHandle。

如有不对之处,欢迎大家讨论。

小葫芦

IPackageStatsObserver.class你这个是怎么得到的

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal