2016-04-12 7 views
0

Я хочу использовать getPackageArchiveInfo для получения другого ресурса apk, но я получаю null, я не знаю, где ошибка. это мой код.почему getPackageArchiveInfo return null

public void loadSkinAsync(String dexPath, final loadSkinCallBack callback) { 
     new AsyncTask<String, Void, Resources>() { 

      protected void onPreExecute() { 
       if (callback != null) { 
        callback.startloadSkin(); 
       } 
      } 

      @Override 
      protected Resources doInBackground(String... params) { 
       try { 
        if (params.length == 1) { 

         String dexPath_tmp = params[0]; 
         File file = new File(dexPath_tmp); 
         PackageManager mPm = mContext.getPackageManager(); 
         PackageInfo mInfo = mPm.getPackageArchiveInfo(dexPath_tmp, PackageManager.GET_ACTIVITIES); 

         mPackageName = mInfo.packageName; 

         AssetManager assetManager = AssetManager.class.newInstance(); 
         Method addAssetPath = assetManager.getClass().getMethod("addAssetPath", String.class); 
         addAssetPath.invoke(assetManager, dexPath_tmp); 

         Resources superRes = mContext.getResources(); 
         Resources skinResource = new Resources(assetManager, superRes.getDisplayMetrics(), superRes.getConfiguration()); 
         return skinResource; 
        } 
        return null; 
       } catch (Exception e) { 
        e.printStackTrace(); 
        return null; 
       } 

      } 

      protected void onPostExecute(Resources result) { 
       mResources = result; 

       if (callback != null) { 
        if (mResources != null) { 
         callback.loadSkinSuccess(); 
        } else { 
         callback.loadSkinFail(); 
        } 
       } 
      } 

     }.execute(dexPath); 
    } 

Сначала я получаю PackageManager, затем я использую его для получения PackageInfo, но PackageInfo имеет значение null.

+0

вы до сих пор не обеспечивают какой-либо требуемой информации. о каком классе PackageManager мы говорим? это тот, который вы написали? что вы передаете как переменные? вы отлаживали свой код? – Stultuske

ответ

0

Вы можете пропустили следующее разрешение, если вы читаете файл, который не находится в каталоге приложения:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />