Android 使用AlarmManager未正确设置报警
我对android开发相当陌生,我的capstone项目团队希望我们的项目由android应用程序警报控制。 我遵循了一些在线指南获取启动代码,我可以让应用程序打开,所有按钮都可以工作,但警报本身不会触发。 我曾经 设置后,logcat会显示警报,而我刚刚设置的警报不会显示,而是显示明天早上的警报 以下是我的主要方法:Android 使用AlarmManager未正确设置报警,android,alarmmanager,Android,Alarmmanager,我对android开发相当陌生,我的capstone项目团队希望我们的项目由android应用程序警报控制。 我遵循了一些在线指南获取启动代码,我可以让应用程序打开,所有按钮都可以工作,但警报本身不会触发。 我曾经 设置后,logcat会显示警报,而我刚刚设置的警报不会显示,而是显示明天早上的警报 以下是我的主要方法: public class pancake_alarm extends Activity { AlarmManager alarmManager; private Pending
public class pancake_alarm extends Activity {
AlarmManager alarmManager;
private PendingIntent pendingIntent;
private TimePicker alarmTimePicker;
private static pancake_alarm inst;
private TextView alarmTextView;
int pancake_quant = 0;
public static pancake_alarm instance() {
return inst;
}
@Override
public void onStart() {
super.onStart();
inst = this;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pancake_alarm);
alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker);
alarmTextView = (TextView) findViewById(R.id.alarmText);
ToggleButton alarmToggle = (ToggleButton) findViewById(R.id.alarmToggle);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
final Button OneButton;
final Button TwoButton;
final Button ThreeButton;
final Button FourButton;
OneButton = (Button) findViewById(R.id.one_button);
OneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pancake_quant = 1;
}
});
TwoButton = (Button) findViewById(R.id.two_button);
TwoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pancake_quant = 2;
}
});
ThreeButton = (Button) findViewById(R.id.three_button);
ThreeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pancake_quant =3;
}
});
FourButton = (Button) findViewById(R.id.four_button);
FourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pancake_quant = 4;
}
});
}
public void onToggleClicked(View view) {
// for debugging
String str = "TAG";
Log.v(str, "Toggle Clicked");
if (((ToggleButton) view).isChecked()) {
Log.d("MyActivity", "Alarm On");
// Update pancake quantity string
setPancakeQuant(pancake_quant);
setPancakeTime(1);
Calendar calendar = Calendar.getInstance();
if (Build.VERSION.SDK_INT >= 23 ) {
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour());
Log.v(str, "Finding Hour, SDK 23+");
}else {
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
Log.v(str, "Finding Hour, SDK < 23");
}
if (Build.VERSION.SDK_INT >= 23 ) {
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getMinute());
Log.v(str, "Finding Minute, SDK 23+");
}else {
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentMinute());
Log.v(str, "Finding Minute, SDK < 23");
}
Intent myIntent = new Intent(pancake_alarm.this, AlarmReciever.class);
pendingIntent = PendingIntent.getBroadcast(pancake_alarm.this, 0, myIntent, 0);
Log.v(str, "Well it got to this fuckin line at least");
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
String nextAlarm = Settings.System.getString(getContentResolver(), Settings.System.NEXT_ALARM_FORMATTED);
Log.v(str, nextAlarm);
} else {
alarmManager.cancel(pendingIntent);
setAlarmText("");
Log.d("MyActivity", "Alarm Off");
// Update pancake quantity string
setPancakeQuant(0);
setPancakeTime(0);
}
}
public class pancake\u报警扩展活动{
AlarmManager AlarmManager;
私人吊挂帐篷;
私人计时器报警器计时器;
专用静态煎饼报警仪;
私有文本视图报警文本视图;
int pancake_quant=0;
公共静态pancake_报警实例(){
返回仪表;
}
@凌驾
public void onStart(){
super.onStart();
inst=这个;
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u pancake\u alarm);
alarmTimePicker=(TimePicker)findViewById(R.id.alarmTimePicker);
alarmTextView=(TextView)findViewById(R.id.alarmText);
ToggleButton alarmToggle=(ToggleButton)findViewById(R.id.alarmToggle);
alarmManager=(alarmManager)getSystemService(报警服务);
最后一个按钮一个按钮;
最终按钮两个按钮;
最终按钮三个按钮;
最终按钮四个按钮;
OneButton=(按钮)findViewById(R.id.one_按钮);
OneButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
煎饼数量=1;
}
});
TwoButton=(按钮)findViewById(R.id.two_按钮);
TwoButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
煎饼数量=2;
}
});
ThreeButton=(按钮)findViewById(R.id.three_按钮);
ThreeButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
煎饼数量=3;
}
});
FourButton=(按钮)findViewById(R.id.four_按钮);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
煎饼数量=4;
}
});
}
已勾选公共空间(视图){
//用于调试
String str=“TAG”;
Log.v(str,“点击切换”);
如果(((切换按钮)视图).isChecked()){
日志d(“我的活动”、“警报开启”);
//更新煎饼数量字符串
设置煎饼量(煎饼量);
设定煎饼时间(1);
日历=Calendar.getInstance();
如果(Build.VERSION.SDK_INT>=23){
calendar.set(calendar.HOUR\u OF_DAY,alarmTimePicker.getHour());
Log.v(str,“查找时间,SDK 23+”);
}否则{
calendar.set(calendar.HOUR OF_DAY,alarmTimePicker.getCurrentHour());
Log.v(str,“查找时间,SDK<23”);
}
如果(Build.VERSION.SDK_INT>=23){
calendar.set(calendar.HOUR\u OF_DAY,alarmTimePicker.getMinute());
Log.v(str,“查找分钟,SDK 23+”;
}否则{
calendar.set(calendar.HOUR OF_DAY,alarmTimePicker.getCurrentMinute());
Log.v(str,“查找分钟,SDK<23”);
}
Intent myIntent=新Intent(pancake\u alarm.this,AlarmReceiver.class);
PendingEvent=PendingEvent.getBroadcast(pancake_alarm.this,0,myIntent,0);
Log.v(str,“至少到了这条该死的线”);
alarmManager.set(alarmManager.RTC_唤醒,calendar.getTimeInMillis(),PendingContent);
String nextAlarm=Settings.System.getString(getContentResolver(),Settings.System.NEXT\u报警\u格式化);
Log.v(str,nextAlarm);
}否则{
alarmManager.cancel(挂起事件);
setAlarmText(“”);
日志d(“我的活动”、“警报关闭”);
//更新煎饼数量字符串
setPancakeQuant(0);
设置煎饼时间(0);
}
}
我也可以张贴我的收信人和服务,但因为他们似乎都没有收到,我不知道他们是否有用
我是不是漏掉了什么明显的东西
谢谢
编辑:这是清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.javapapers.androidalarmclock">
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.example.dustin.pancake_alarm.pancake_alarm"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.example.dustin.pancake_alarm.AlarmService"
android:enabled="true" />
<receiver android:name="com.example.dustin.pancake_alarm.AlarmReciever" />
</application>
下一个\u ALARM\u FORMATTED
不会显示您在代码中设置的报警。您的清单中是否有
元素用于AlarmReceiver
?我在主活动的清单中有AlarmReceiver在receiver中,但我是否也需要接收器和服务的清单?我不确定是否在跟踪您。你只有一个清单。除此之外,你需要一个
元素用于AlarmReceiver
,一个
元素用于服务
类。这些元素必须在你的问题中才能发布清单,我们可以看一下。啊,我明白了。很抱歉,我是新手,所以我感到困惑。清单发布这项工作,谢谢!我以前设置不正确,这帮助我找到了错误。谢谢!下一个\u ALARM\u FORMATTED
不会显示您在代码中设置的报警。您的清单中是否有
元素用于AlarmReceiver
?我在清单中的主要活动的接收器中有AlarmReceiver,但我需要它吗接收者和服务的anifest?我不确定我是否在跟踪你。你只有一个清单。除此之外,你需要一个
元素用于AlarmReceiver
,一个
元素用于服务
类。这些元素必须在问题中才能发布清单,我们可以有一个look、 啊,我明白了。很抱歉,我是新手,所以我感到困惑。Manifest Posted这很有效,谢谢!我以前设置不正确,这帮助我找到了错误。谢谢!
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.javapapers.androidalarmclock">
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.example.dustin.pancake_alarm.pancake_alarm"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.example.dustin.pancake_alarm.AlarmService"
android:enabled="true" />
<receiver android:name="com.example.dustin.pancake_alarm.AlarmReciever" />
</application>