2016-03-31 27 views
0

Ich kann meine Funktion auf den Klick einer Schaltfläche ohne Probleme wie diese aufrufen und es funktioniert, wischt auch Daten.So rufen Sie eine Methode von einem Dienst auf?

public class MainActivity extends Activity implements OnCheckedChangeListener { 
DevicePolicyManager devicePolicyManager; 


public void resetdevice(View view) { 
Toast.makeText(context, "resetttt", Toast.LENGTH_LONG).show(); 
    // We reset the device - this will erase entire /data partition! 
    Log.d(TAG, 
      "RESETing device now - all user data will be ERASED to factory settings"); 
    devicePolicyManager.wipeData(ACTIVATION_REQUEST); 
} 

aber, um diese Methode von einem anderen Dienst aufzurufen, muss ich einige Änderungen vornehmen.

public class MainActivity extends Activity implements OnCheckedChangeListener { 
static DevicePolicyManager devicePolicyManager; 

und meine Methode

public static void resetdevice(Context context) { 
    Toast.makeText(context, "resetttt", Toast.LENGTH_LONG).show(); 
    // We reset the device - this will erase entire /data partition! 
    Log.d(TAG, 
      "RESETing device now - all user data will be ERASED to factory settings"); 
    devicePolicyManager.wipeData(ACTIVATION_REQUEST); 
} 

hier ist, wie ich es nenne

MainActivity.resetdevice(context); 

das Problem ist, wenn es von meinem Kundendienst anrufen, es zeigt nur, Toast und nicht Führe den Rest des Codes aus.

+0

Haben Sie überprüft, ob eine Ausnahme ausgelöst wird? –

+0

Ich denke, diese Zeile verursacht ein Problem - static DevicePolicyManager devicePolicyManager; – abbie

+0

Sie müssen 'DevicePolicyManager' nicht initialisieren, um' wipeData' Methode zu verwenden? Ich bin damit nicht so vertraut. –

Antwort

0

Wenn Sie sind gut genug, Event Bus zu benutzen als Ereignis Bus in Ihrem Code zu implementieren und, wenn Sie wollen Methode aufrufen nur Brandereignis von Ihrem Service wird Ihre Methode aufrufen, wo immer Sie implementiert haben.

oder

Try Rundfunkempfänger zu verwenden und eine breite Guss senden, wenn Sie Ihre Methode von Service anrufen möchten.

0

Sie können nicht direkt Aktivität Methode aus dem Dienst so nennen. Bitte verwenden Sie entweder Broadcast- oder Bind-Objekt. eine Kasse ex here

0

Try this:

public static void resetdevice(Context context) { 
    DevicePolicyManager devicePolicyManager= (DevicePolicyManager) context 
.getSystemService(Context.DEVICE_POLICY_SERVICE); 
     Toast.makeText(context, "resetttt", Toast.LENGTH_LONG).show(); 
     // We reset the device - this will erase entire /data partition! 
     Log.d(TAG, 
       "RESETing device now - all user data will be ERASED to factory settings"); 
     devicePolicyManager.wipeData(ACTIVATION_REQUEST); 
    } 

Jedoch habe ich es den Weg durch @jack wie gesagt tun empfehlen.

0

Sie möchten Bound Services überprüfen. Sie können diese verwenden, um Ihre benachrichtigen Activity, die es braucht resetDevice von Ihrem ActivityMessenger and Handlers mit rufen.

Verwandte Themen