2016-03-31 17 views
0

私はこのような問題のないボタンをクリックして自分の関数を呼び出すことができ、それは動作し、データも消去します。サービスからメソッドを呼び出す方法は?

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

しかし、このメソッドを別のサービスから呼び出すには、いくつか変更する必要があります。

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

と私の方法ここ

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

iは問題がある

MainActivity.resetdevice(context); 

それを呼び出す方法です私のサービスからそれを呼び出すときに、それだけでトーストを示し、そしてません残りのコードを実行します。

+0

例外がスローされているかどうかチェックしましたか? –

+0

私はこの行が問題の静的なDevicePolicyManagerのdevicePolicyManagerを引き起こしていると思います。 – abbie

+0

'wipeData'メソッドを使うために' DevicePolicyManager'を初期化する必要はありませんか?私はこれに慣れていない。 –

答えて

0

コードでイベントバスを実装するよりもイベントバスを使用するのに十分で、メソッドを呼び出す場合は、サービスからのイベントを起動するだけで実装済みのメソッドが呼び出されます。

または

は、あなたがサービスからあなたのメソッドを呼び出したいとき、放送受信機を使用し、幅広いキャストを送信してください。

0

このようなサービスからアクティビティメソッドを直接呼び出すことはできません。ブロードキャストオブジェクトまたはバインドオブジェクトを使用してください。チェックアウト1元here

0

はこれを試してみてください:@jackで言ったように

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

は、しかし、私はそれをする方法を行うことをお勧めします。

0

Bound Servicesをチェックしてください。これを使用してActivityActivityからresetDeviceを電話する必要があることをMessenger and Handlersに通知することができます。

関連する問題