切换自动启动Android

时间:2016-02-18 14:47:37

标签: android

尝试创建一个可在启动时自动启动的应用,但可以选择关闭此功能。编程很新。

这是清单

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

这是听众类

public class MyBootReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    boolean auto = prefs.getBoolean("as", true);

    if(auto == true) {
        Intent i = new Intent(context, MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }
}

这是设置类

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    autostart= (Switch) findViewById(R.id.switch1);
    autostart.setOnClickListener(this);

    settings = getSharedPreferences("as", MODE_PRIVATE);
    editor = settings.edit();

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    boolean auto = prefs.getBoolean("as", false);

    if(auto == true){
        autostart.setChecked(true);
    }else{
        autostart.setChecked(false);
    }

    @Override
public void onClick(View view) {
    Switch auto = (Switch) view;
    if (auto.isChecked())
    {
        editor.putBoolean("as",true);
        Toast.makeText(SettingsActivity.this, "autostart on", Toast.LENGTH_SHORT).show();
        editor.commit();

    }else{
        editor.putBoolean("as",false);
        Toast.makeText(SettingsActivity.this, "autostart off", Toast.LENGTH_SHORT).show();
        editor.commit();

    }
}

正如您所看到的,我正在尝试使用按钮来切换自动启动功能,我没有错误,但是程序总是在启动时启动。我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

您将值设置为不同于尝试从中读取的首选项。您正在使用getSharedPreferences("as")存储它并getDefaultSharedPreferences()来阅读它。

另外,prefer using package manager to enable or disable the broadcast receiver itself