防止服务在启动时启动

Prevent a service from starting at startup

我的广播接收器在应用程序启动时自动运行。

如何预防?我想在单击按钮时启动它。

BroadCastReceiver:

public class TestAlarmReceiver extends BroadcastReceiver {

    @DebugLog
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, TestService.class);
        i.putExtra("foo", "bar");
        context.startService(i);
    }
}

意向服务:

public class TestService extends IntentService {

    public TestService() {
        super("TestService");
    }

    @DebugLog
    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d(getClass().getSimpleName(), "Service is running");
    }
}

此外,我将这些行添加到应用程序部分内的 AndroidManifest 文件中:

    <receiver
        android:name=".service.TestAlarmReceiver"
        android:process=":remote" />

    <service
        android:name=".service.TestService"
        android:exported="false" />

您应该设置 android:enabled="false"options for receiver) for your receiver on your manifest and then activate it using package Manager 以启用它。 然后你可以在按钮点击上写这个函数:

public void enableReceiver(Context context) {
    ComponentName component = new ComponentName(context, TestAlarmReceiver .class);
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(
                component,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
}

要在运行时停止接收器,您只需使用常量 PackageManager.COMPONENT_ENABLED_STATE_DISABLED 而不是 PackageManager.COMPONENT_ENABLED_STATE_ENABLED

我现在无法尝试,但这应该可以。

我用了很粗糙的方法,但它对我有用! 在 class 中扩展 BroadcastReceiver

if (MyService.getInstance()==null) return;

服役地点。

private static MyService ins;
public static MyService getInstance() {
    return ins;
}