[英]Android AlarmManager Alarm Not Working
I'm trying to make a simple alarm trigger. 我正在尝试制作一个简单的警报触发器。 When alarm goes off there should aa simple sound alarm.
警报响起时,应该有一个简单的声音警报。 But the alarm doesn't go off, nothing happens.
但是警报没有响起,什么也没发生。 Now I'm not sure where am I mistaken - is it the times?
现在我不确定我在哪里弄错了-是时候了吗? Intents?
意向? Receivers?
接收者?
Class in which I'm using AlarmManager 我正在使用AlarmManager的类
package com.example.prva;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
public class Meni_Splash extends Activity{
Calendar c = Calendar.getInstance();
private int hour = c.get(Calendar.HOUR_OF_DAY);
private int minute = c.get(Calendar.MINUTE);
int milivreme;
int milipicker;
long sveskupa;
int hoursad;
int minutesad;
protected boolean timeactive = true;
Handler h=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
h.post(new Runnable(){
@Override
public void run() {
String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
TextView text = (TextView) findViewById(R.id.textDate);
text.setText(currentDateTimeString);
h.postDelayed(this, 1000);
}
});
final TimePicker picker = (TimePicker) findViewById(R.id.timePicker);
final TextView text = (TextView) findViewById(R.id.texttime);
picker.setIs24HourView(true);
picker.setCurrentHour(hour);
picker.setCurrentMinute(minute);
Button btnt = (Button) findViewById(R.id.buttontime);
btnt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
hoursad = picker.getCurrentHour();
minutesad = picker.getCurrentMinute();
milipicker = (((hoursad) * 60 * 60 * 1000) + ((minutesad) * 60 * 1000));
text.setText(new StringBuilder().append(hoursad).append(":").append(minutesad).append( "Trenutno vrijeme u milisekundama : ").append(System.currentTimeMillis()).append(" vrijeme izabrano u milisekundama sve skupa ").append(milipicker));
}
});
Button btnalarm = (Button) findViewById(R.id.btnalarm);
btnalarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
hoursad = picker.getCurrentHour();
minutesad = picker.getCurrentMinute();
milivreme = (((hour)* 60 * 60 * 1000)+ ((minute) * 60 * 1000));
milipicker = (((hoursad) * 60 * 60 * 1000) + ((minutesad) * 60 * 1000));
sveskupa = milipicker - milivreme;
Intent intent = new Intent(Meni_Splash.this, AlarmReceiver.class);
PendingIntent pendingintent = PendingIntent.getActivity(Meni_Splash.this, 2, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + sveskupa, pendingintent);
}
});
Button btnv = (Button) findViewById(R.id.buttonv);
btnv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent(Meni_Splash.this, button.class));
}
});
}
}
AlarmReceiver class : AlarmReceiver类:
package com.example.prva;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
public class AlarmReceiver extends Activity {
protected MediaPlayer MPAlarm;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
MPAlarm = MediaPlayer.create(this, R.raw.splash);
MPAlarm.start();
}
};
You should register your AlarmReceiver on the Manifest with this: 您应该使用以下清单在清单上注册AlarmReceiver:
<receiver android:process=":remote" android:name="com.yourpackage.AlarmReceiver" android:enabled="true" ></receiver>
Don't forget to put the android:process=":remote" in order to make it work. 不要忘记放置android:process =“:remote”使其起作用。
Look like there problem in AlarmManager set() function. 看起来AlarmManager set()函数中存在问题。
AlarmManager Set() => AlarmManager Set()=>
public void set (int type, long triggerAtMillis, PendingIntent operation) 公共无效集(int类型,长触发器AtMillis,PendingIntent操作)
Parameters type One of ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC or RTC_WAKEUP. 参数类型为ELAPSED_REALTIME,ELAPSED_REALTIME_WAKEUP,RTC或RTC_WAKEUP中的一种。 triggerAtMillis time in milliseconds that the alarm should go off, using the appropriate clock (depending on the alarm type).
使用适当的时钟(取决于警报类型),triggerAtMillis警报发出的时间(以毫秒为单位)。 operation Action to perform when the alarm goes off;
警报响起时执行的操作; typically comes from IntentSender.getBroadcast().
通常来自IntentSender.getBroadcast()。
Please note that operation (PendingIntent), will get the action from IntentSender.getBroadcast(). 请注意,操作(PendingIntent)将从IntentSender.getBroadcast()中获取操作。 Hope it's helps.
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.