Очистка данных другого приложения

Я пишу приложение, которое должно иметь возможность очищать личные данные любого другого приложения. Если вас интересует вариант использования, то он похож на клиента MDM / MAM. Я хотел бы выборочно стереть данные приложения (вместо полной очистки устройства).

Я наткнулся на следующий вызов API в исходном коде Android.

ActivityManager.clearApplicationUserData(String packageName,IPackageDataObserverobserver)

Странно то, что это действительно недоступно для вас как часть SDK. (Так что eclipse доставит вам ад за попытку его использовать). Однако он присутствует (см. здесь ), вы можете вызвать его через отражение. Однако я все еще не могу получить интерфейс IPackageDataObserver .

Есть ли лучший способ сделать это? Я знаю, что это МОЖНО сделать, поскольку я видел, как такие продукты, как MaaS360, производят выборочную очистку данных приложений.

Есть предложения?


ОБНОВЛЕНИЕ

На основании того, что @lechlukasz обрисовал в общих чертах ниже ... следующий код может выполняться ... но вы, наконец, получаете исключение SecurityException, поскольку диспетчер пакетов отменяет разрешение CLEAR_APP_USER_DATA когда приложение установлено.

Class iPackageDataObserverClass= Class.forName("android.content.pm.IPackageDataObserver");

Class activityManagerClass=ActivityManager.class;
ActivityManager activityManager=(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

Method clearDataMethod=activityManagerClass.getMethods()[0];

Object iPackageDataObserverObject = Proxy.newProxyInstance(
    MyApp.class.getClassLoader(), new Class[]{iPackageDataObserverClass}, 
                        new InvocationHandler() {

            public Object invoke(Object proxy, Method method, Object[] args) 
                    throws Throwable {
                Log.i("Proxy", method.getName() + ": " + Arrays.toString(args));
                return null;
            }
        });


clearDataMethod.invoke(activityManager, "com.example.test",iPackageDataObserverObject);

Итак, это работает, поскольку метод может быть вызван. Не повезло с фактической возможностью очистить сами данные. : - (

6
задан Archit 27 February 2012 в 05:50
поделиться