Я застрял с простым диспетчером аварий на несколько дней. Ожидается, что Alarm Manager запустит службу, но проблема в том, что она не запускает службу.
Моя Основная активность :
public class MainActivity extends Activity {
private Button start
private Button stop
@Override
protected void onCreate (Bundle _savedInstanceState){
super.onCreate (_savedInstanceState);
setContentView(R.layout.main);
initialize(_savedInstanceState);
initializeLogic();
}
private void initialize(Bundle _savedInstanceState) {
start = (Button) findByViewId(R.id.start);
stop = (Button) findByViewId(R.id.stop);
start.setOnClickListener(new View.onClickListener(){
@Override
public void onClick(View _view){
startAlert();
}});
stop.setOnClickListener(new View.onClickListener(){
@Override
public void onClick(View _view){
stopAlert();
}});
private void initializeLogic(){}
@Override
protected void onActivityResult(int _requestCode, int _resultCode, Intent _data){
super.onActivityResult(_requestCode, _resultCode, _data);
switch (_requestCode){
default:
break;
}}
public void startAlert() {
int i = 5;
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), pendingIntent);
Toast.makeText(this, "Alarm set in " + i + " seconds", Toast.LENGTH_LONG).show();
}
public void stopAlert() {
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Toast.makeText(this, "Alarm stopped", Toast.LENGTH_LONG).show();
}
}
Моя BroadcastReceiver:
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "Intent received", Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, MyService.class);
context.startService(intent);
}
}
Моя Служба :
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "onStartCommand Called", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "onDestroy Called", Toast.LENGTH_LONG).show();
}
}
Я зарегистрировал службу и BroadcastReceiver в манифесте. Следуя нескольким предложениям по работе со стеком, я попробовал «MyService» (без.), Но он все еще не работает.
<service android:name=".MyService" />
<receiver android:name=".MyBroadcastReceiver" />
- Я пытался вызывать startService и stopService напрямую с кнопок «Пуск» и «Стоп» иэто работает отлично. Я получаю «onStartCommand звонил» и «onDestroy звонил».
- Когда я устанавливаю будильник, он не запускает службу, что означает, что есть какая-то проблема либо с AlarmManager, либо с BroadcastReceiver. Я получаю тексты «Тревога установлена через 5 секунд» и «Тревога остановлена», когда я нажимаю кнопки Старт или Стоп соответственно, но я не получаю «Намерение получено» через 5 секунд.
Я попробовал несколько примеровдоступны на этом форуме или других сайтах, но у меня ничего не работает. Кто-нибудь может подсказать, пожалуйста, что я делаю не так?