搜尋

首頁  >  問答  >  主體

android - PackageManager反射方法时,报 java.lang.NoSuchMethodException:错误?

天蓬老师天蓬老师2772 天前785

全部回覆(2)我來回復

  • 高洛峰

    高洛峰2017-04-17 16:46:32

    在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。

    如有不對之處,歡迎大家討論。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 16:46:32

    IPackageStatsObserver.class你這個是怎麼得到的

    回覆
    0
  • 取消回覆