Я пытаюсь отображать тост каждую минуту, даже если мое приложение убито, при условии, что пользователь проверяет определенный переключатель в моем приложении. Я сохранил значение переключателя, используя SharedPreferences. Я не знаю, как вызвать службу условно, и мой код до сих пор выдает ошибку «Не удается создать обработчик внутри потока, который не вызвал Looper.prepare ()».
MyService.xml:
public class MyService extends GcmTaskService {
@Override
public int onRunTask(TaskParams taskParams) {
Toast.makeText(this, "Periodic one eh", Toast.LENGTH_SHORT).show();
return 0;
}
}
SettingsActivity.java (переключатели ручек):
public class SettingsActivity extends AppCompatActivity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_page);
Switch auto = findViewById(R.id.auto);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
getWindow().setLayout((int) (width * 0.9), (int) (height * 0.8));
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("switchKey", false);
auto.setChecked(silent);
auto.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("switchKey", isChecked);
editor.commit();
}
});
handler();
}
public void handler() {
SharedPreferences shared = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
Boolean channel = (shared.getBoolean("switchKey", false));
String tag = "periodic";
GcmNetworkManager mScheduler = GcmNetworkManager.getInstance(getApplicationContext());
long periodSecs = 10L;// 1 minute
PeriodicTask periodic = new PeriodicTask.Builder()
.setService(BackgroundWallpaperSetter.class)
.setPeriod(periodSecs)
.setTag(tag)
.setPersisted(true)
// .setUpdateCurrent(true).setRequiredNetwork(com.google.android.gms.gcm.Task.NETWORK_STATE_CONNECTED)
.build();
mScheduler.schedule(periodic);
}
}
Пожалуйста, помогите. :)