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

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

全部回覆(2)
小葫芦

在Android4.2以上版本中,PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)不可用,改為PackageManager.getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver userobserver),增加的參數:Theose 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你這個是怎麼得到的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板