2016-04-28 4 views
2

Я пытаюсь разработать приложение для Android, которое может стереть другие данные кэша приложений. Я попытался просмотреть все блоги, но никто из них не работал для меня. Я могу очистить кэш-память приложения с помощью следующего кода
Как очистить кэш других приложений от другого приложения Android в Marshmallow?

Ссылка:
How to delete other applications cache from our android app?

private static final long CACHE_APP = Long.MAX_VALUE; 
private CachePackageDataObserver mClearCacheObserver; 

btnCache.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      clearCache(); 
     } 
    });//End of btnCache Anonymous class 

void clearCache() 
{ 
    if (mClearCacheObserver == null) 
    { 
     mClearCacheObserver=new CachePackageDataObserver(); 
    } 

    PackageManager mPM=getPackageManager(); 

    @SuppressWarnings("rawtypes") 
    final Class[] classes= { Long.TYPE, IPackageDataObserver.class }; 

    Long localLong=Long.valueOf(CACHE_APP); 

    try 
    { 
     Method localMethod= 
      mPM.getClass().getMethod("freeStorageAndNotify", classes); 

     /* 
     * Start of inner try-catch block 
     */ 
     try 
     { 
     localMethod.invoke(mPM, localLong, mClearCacheObserver); 
     } 
     catch (IllegalArgumentException e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     catch (IllegalAccessException e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     catch (InvocationTargetException e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     /* 
     * End of inner try-catch block 
     */ 
    } 
    catch (NoSuchMethodException e1) 
    { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
}//End of clearCache() method 

private class CachePackageDataObserver extends IPackageDataObserver.Stub 
{ 
    public void onRemoveCompleted(String packageName, boolean succeeded) 
    { 

    }//End of onRemoveCompleted() method 
}//End of CachePackageDataObserver instance inner class 


А также создать пакет в папку Src с именем android.content.pm внутри этого пакета создания файл в имени IPackageDataObserver .aidl и вставьте сюда следующий код

package android.content.pm; 

/** 
* API for package data change related callbacks from the Package Manager. 
* Some usage scenarios include deletion of cache directory, generate 
* statistics related to code, data, cache usage(TODO) 
* {@hide} 
*/ 
oneway interface IPackageDataObserver { 
    void onRemoveCompleted(in String packageName, boolean succeeded); 
} 


и в своем манифесте убедитесь, что вы использовали следующий код

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

Выше коды успешно расчищенные до леденца, но когда этот код выполнить в Marshamallow, то не ясно, все данные. Почему это делает ??????????????

Любые предложения будут приниматься. или другой способ решения. Благодарю.

+0

У меня такая же проблема. Если вы найдете какое-либо решение, поделитесь со мной –

ответ

0

Потому что это неофициальный способ сделать это, и Google повысил уровень подписи метода до подписи | system @ Marshamallow.

Смежные вопросы