在启动时为启动应用程序创建切换选项

时间:2018-12-05 13:49:27

标签: android service broadcastreceiver boot

因此,基本上,我正在制作一个将在后台运行的应用程序。现在,我的应用程序可以选择启动和停止服务,但默认情况下将在启动时运行该服务。

有没有一种类似于“ Windows启动时启动”的拨动开关的方法,允许用户启用在启动手机时是否要启动该服务的功能?

如果这是我的代码……启动运行该活动的BG服务:

public class startOnBoot extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent arg1)
{
Intent intent = new Intent(context,backgroundService.class);
context.startService(intent);
Log.i("Autostart", "Service Started");
}
}

我有我的切换按钮:

final ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
        toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Toast.makeText(getBaseContext(), "On", Toast.LENGTH_LONG).show();
                    enableReceiver(Home.this);
                } else {
                    Toast.makeText(getBaseContext(), "Off", Toast.LENGTH_LONG).show();
                    disableReciever(Home.this);
                }
            }
        });

还有两个功能:

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

    public void disableReciever(Context context) {
        ComponentName component = new ComponentName(context, startOnBoot.class);
        PackageManager pm = context.getPackageManager();
        pm.setComponentEnabledSetting(
                component,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
    }

问题是,尽管这可能会启用和禁用该功能;如果我重新启动手机,它将默认为我的AndroidManifest读取的内容,默认情况下已禁用。因此解决方案不是永久性的,它会重置。我不知道这是否是正确的方法,但是我需要做些什么才能允许用户选择是否需要自动启动功能。

1 个答案:

答案 0 :(得分:1)

您可以将切换开关的值(是或否)存储在共享首选项中。在接收器中检索它,如果为true,则启动服务。