How to delete other applications cache from our android app?

前端 未结 3 1387
悲哀的现实
悲哀的现实 2020-11-28 08:24

I\'m trying to develop an android app that could erase others application cache data, I tried to browse through all blogs but none of them worked for me, I can able to clear

3条回答
  •  [愿得一人]
    2020-11-28 08:51

    This API is no more supported in API 23, that is Marshmallow. Permission is deprecated in Marshmallow.

    But there is another way by asking run time permission for Accessories. Try app All-in-one Toolbox from play store. This app is able to clear other apps cache even in Marshmallow. Then it should be possible for us to do so.

    I am researching on this. Once I found the solution, I will update the answer. Thanks.


    OLD ANSWER IS AS FOLLOWS


    I used the following code and now I'm able to clear all application's cache without rooting, it's working perfectly for me,

    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
    

    And also create a pacakge in your src folder with the name android.content.pm inside that package create a file in the name IPackageDataObserver.aidl and paste the following code to it

    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);
    }
    

    and in your manifest make sure you used the following code

    
    

    If you guys find any problem feel free to contact me, Thanks.

提交回复
热议问题