Как очистить кеш других приложений из другого приложения для Android в Marshmallow?

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

Ссылка:
Как удалить кэш других приложений из наше приложение для Android?

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"/>

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

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


person omor    schedule 28.04.2016    source источник
comment
У меня та же проблема. Если вы найдете какое-либо решение, пожалуйста, поделитесь со мной   -  person akhil batlawala    schedule 22.12.2016


Ответы (1)


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

person Diego Plentz    schedule 18.05.2017