Wie benutzt man Reflexion, um den Backup-Service zu ändern?

Ich habe eine Frage zu einem neuen Verhalten von Android 5.1 geschrieben, das den Backup Service bei der Einrichtung eines Geräteeigentümers auf einem Gerät hier deaktiviert …

Eine mögliche Lösung könnte (ich glaube), um Reflexion zu verwenden, um das Problem zu beheben: Ich könnte einige Reflexionsbeispiele mit einer bestimmten Methode in einer versteckten Klasse finden, aber dieser Fall sieht komplizierter aus, mit einem Konstruktor, der eine andere versteckte Klasse (ServiceManager) verwendet, Etc. und ich weiß nicht, wie das zu tun …

  • Kann nicht auf App Engine Application zugreifen, die in Android Studio mit Android Device Application im LAN ausgeführt wird
  • Gemeinsame Präferenzen? Javax.crypto.BadPaddingException: Pad-Block beschädigt nur bei einigen Geräten
  • Prozentsatzbreite in einem RelativeLayout
  • Wie man eine bereits kompilierte APK unterschreibt
  • Wo finde ich eine Liste von Android-Features, die von neueren Features veraltet sind?
  • Android unterstützt Multidex-Bibliothek Implementierung
  • Der Code, der mich ärgert, befindet sich in DevicePolicyManagerService.java (siehe hier ) auf den Zeilen 3739 bis 3749:

    long ident = Binder.clearCallingIdentity(); try { IBackupManager ibm = IBackupManager.Stub.asInterface( ServiceManager.getService(Context.BACKUP_SERVICE)); ibm.setBackupServiceActive(UserHandle.USER_OWNER, false); } catch (RemoteException e) { throw new IllegalStateException("Failed deactivating backup service.", e); } finally { Binder.restoreCallingIdentity(ident); } 

    Und mein Ziel wäre es, den Backup-Service wieder zu aktivieren, idealerweise würde das so etwas anrufen:

     ibm.setBackupServiceActive(UserHandle.USER_OWNER, false); 

    Könnten Sie mir helfen?

  • Fehler: Ausführung fehlgeschlagen für Task, beendet mit Nicht-Null-Exit-Wert 1
  • Machen authentifizierte POST-Anfragen mit Spring RestTemplate für Android
  • Holen Sie sich boolean aus der Datenbank mit Android und SQLite
  • Aufruf von setContentView () mehrmals
  • Android: facebook sdk logout Problem?
  • Wie konvertiere ich eine PDF-Seite in ein Bild in Android?
  • One Solution collect form web for “Wie benutzt man Reflexion, um den Backup-Service zu ändern?”

    Versuchen Sie diesen Code:

      try { Class<?> iBackupManagerClass = Class.forName("android.app.backup.IBackupManager"); Class<?> serviceManagerClass = Class.forName("android.os.ServiceManager"); Class<?>[] classes = iBackupManagerClass.getDeclaredClasses(); Class<?> stubClass = null; for (Class clazz : classes) { if (clazz.getSimpleName().equals("Stub")) { stubClass = clazz; } } Method setBackupServiceActiveMethod = iBackupManagerClass.getMethod("setBackupServiceActive", int.class, boolean.class); Method asInterfaceMethod = stubClass.getMethod("asInterface", IBinder.class); Method getServiceMethod = serviceManagerClass.getMethod("getService", String.class); Object ibm = asInterfaceMethod.invoke(null, getServiceMethod.invoke(null, "backup")); setBackupServiceActiveMethod.invoke(ibm, 0, false); } catch (ClassNotFoundException e) { Log.e("TEST", e.getMessage(), e); } catch (NoSuchMethodException e) { Log.e("TEST", e.getMessage(), e); } catch (InvocationTargetException e) { Log.e("TEST", e.getMessage(), e); } catch (IllegalAccessException e) { Log.e("TEST", e.getMessage(), e); } 

    Es wird etwas Refactoring für Fehler fangen …

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.