android - 防止服务在启动时启动

标签 android service 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);
    }
}

Intent 服务:

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" />

最佳答案

您应该在 list 中为接收器设置 android:enabled="false" ( options for receiver ),然后使用 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

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

关于android - 防止服务在启动时启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32203649/

相关文章:

android - "android update project -p ..."要设置什么环境变量

Android:ImageView 禁用缩放

java - httpPost setEntity 始终为空

c++ - 使用QT开发服务器应用程序是个好主意吗?(QT5)

java - 如何访问下载接收器中的本地文件名?

android - 应用程序卸载时无法获取接收器

android - 如何在广播接收器中设置闹钟

android - 屏幕解锁时崩溃

php - 让php脚本作为linux服务运行

java - 服务在强制关闭时重新启动并使用 Android 重新启动