如何从服务中调用方法?

时间:2016-03-31 05:15:51

标签: android

我可以通过单击按钮调用我的功能,没有这样的问题并且它可以工作,也可以擦除数据。

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

这就是我怎么称呼它

MainActivity.resetdevice(context);

问题是,当我从我的服务中调用它时,它只显示吐司,并且不会执行其余的代码。

4 个答案:

答案 0 :(得分:0)

如果您足够好使用事件总线而不是在代码中实现事件总线,并且当您想要调用方法时,来自您服务的fire事件将在您实施的任何地方调用您的方法。

当您想要从服务中调用您的方法时,尝试使用广播接收器并发送广播。

答案 1 :(得分:0)

您无法直接从服务中调用活动方法。请使用广播或绑定对象。结帐前一个here

答案 2 :(得分:0)

试试这个:

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

但我建议按照@jack所说的方式进行。

答案 3 :(得分:0)

您可能需要查看Bound Services。您可以使用此功能通知您Activity需要使用resetDeviceActivity致电Messenger and Handlers