android 内未调用警报
Alarm not getting called in android
我正在尝试学习 android 中 AlarmManager 的功能。
我试图在每 10 second.But 后调用警报问题是我得到一个空白 screen.Then 我发现我试图在警报唤醒时调用的意图没有得到 called.Please 有人帮我解决这个问题吗?
MainActivity.java
public class MainActivity extends AppCompatActivity {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Log.d("asd","initialized alarmintent");
alarmMgr.set(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime()+10*1000, alarmIntent);
Log.d("asd", "alarm set");
}
}
AlarmReceiver.java
public class AlarmReceiver extends AppCompatActivity
{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_layout);
Log.d("asd","writing textview");
tv=(TextView)findViewById(R.id.textview);
tv.setText("called");
}
}
您调用 PendingIntent 错误:
Intent intent = new Intent(this, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
看看你是如何调用 PendingIntent 的。getBroadcast(this, 0, intent, 0)
这是错误的,因为您的 AlarmReceiver 是一个 Activity(不是像您所说的未决意图那样的 BroadcastReceiver)。尝试这样称呼它:
alarmIntent = PendingIntent.getActivity(this, 0, intent, 0);
您的问题只是未决意图的错误使用:)
这是文档:
http://developer.android.com/reference/android/app/PendingIntent.html
编辑:文档还说:
Note that the activity will be started outside of the context of an existing activity, so you must use the Intent.FLAG_ACTIVITY_NEW_TASK launch flag in the Intent.
所以请确保您也这样做了。
我正在尝试学习 android 中 AlarmManager 的功能。 我试图在每 10 second.But 后调用警报问题是我得到一个空白 screen.Then 我发现我试图在警报唤醒时调用的意图没有得到 called.Please 有人帮我解决这个问题吗?
MainActivity.java
public class MainActivity extends AppCompatActivity {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Log.d("asd","initialized alarmintent");
alarmMgr.set(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime()+10*1000, alarmIntent);
Log.d("asd", "alarm set");
}
}
AlarmReceiver.java
public class AlarmReceiver extends AppCompatActivity
{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_layout);
Log.d("asd","writing textview");
tv=(TextView)findViewById(R.id.textview);
tv.setText("called");
}
}
您调用 PendingIntent 错误:
Intent intent = new Intent(this, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
看看你是如何调用 PendingIntent 的。getBroadcast(this, 0, intent, 0)
这是错误的,因为您的 AlarmReceiver 是一个 Activity(不是像您所说的未决意图那样的 BroadcastReceiver)。尝试这样称呼它:
alarmIntent = PendingIntent.getActivity(this, 0, intent, 0);
您的问题只是未决意图的错误使用:)
这是文档:
http://developer.android.com/reference/android/app/PendingIntent.html
编辑:文档还说:
Note that the activity will be started outside of the context of an existing activity, so you must use the Intent.FLAG_ACTIVITY_NEW_TASK launch flag in the Intent.
所以请确保您也这样做了。