Трансляция намерений Android

#android

#Android

Вопрос:

Я хочу создать программу, в которой действие вызывается через 30 секунд после нажатия кнопки. У меня есть user pendingIntent и BroadcastReciever для этого pupose, но ничего не происходит. Мой код:

 package com.example.wrox;

import java.util.Calendar;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class AlarmManagerDemo extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Calendar cal= Calendar.getInstance();
        cal.add(Calendar.SECOND, 30);
        Button btn= (Button) findViewById(R.id.btn);
        Intent intent= new Intent(this,AlarmManagerDemo.class);
        intent.putExtra("alarm_message", "Maza aa  gaya");
        final PendingIntent sender= PendingIntent.getBroadcast(this, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast message= Toast.makeText(getApplicationContext(), "This is Starting", Toast.LENGTH_LONG);
                message.show();
                AlarmManager am= (AlarmManager) getSystemService(ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

            }
        });

    }
} 
  

Это действие вызывает приемник Broadcase через 30 секунд после нажатия кнопки. Код является :

 package com.example.wrox;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class AlarmDemo extends BroadcastReceiver{
@Override
public void onReceive(Context ctx, Intent intent) {
    try{
    Bundle bundle= intent.getExtras();
    String msg= bundle.getString("alarm_message");
    Intent newIntent= new Intent(ctx, NewActivity.class);
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    ctx.startActivity(newIntent);
    }
    catch(Exception e)
    {
        Toast message= Toast.makeText(ctx, "Error occured", Toast.LENGTH_LONG);
        message.show();
    }
}
}
  

Это BroadcastReciever вызывает действие, которое я использовал Toast для отображения некоторого статического содержимого. Но после нажатия кнопки ничего не происходит. Пожалуйста, подскажите мне, где я допускаю ошибку?
Никаких ошибок и исключений не генерируется…

Ответ №1:

Это хороший ресурс по обновлению пользовательского интерфейса с помощью таймера.

Просто перейдите в Handler или a Runnable при нажатии кнопки и спите в течение 30 секунд, затем вызовите BroadCastReciever

Ответ №2:

Вы определили BroadcastReceiver в AndroidManifest.xml ?