#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
?