简体   繁体   English

AlarmManager在Android中不起作用

[英]AlarmManager is not working in Android

I'm following a tutorial on AlarmManager. 我正在关注有关AlarmManager的教程。 I've run the tutorial's code in the emulator but the alarm does not go off. 我已经在模拟器中运行了本教程的代码,但警报没有响起。 In addition, the tutorial makes use of clone in the first java class for Calendar, why does it clone here? 另外,本教程在Calendar的第一个Java类中使用了clone,为什么要在这里进行克隆?

Any help would be greatly appreciated. 任何帮助将不胜感激。

Here is the code: 这是代码:

AndroidTimeActivity.java AndroidTimeActivity.java

public class AndroidTimeActivity extends Activity {

TimePicker myTimePicker;
Button buttonstartSetDialog;
TextView textAlarmPrompt;

TimePickerDialog timePickerDialog;

final static int RQS_1 = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt);

    buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
    buttonstartSetDialog.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View v) {
    textAlarmPrompt.setText("");
    openTimePickerDialog(false);

        }
    });

}


private void openTimePickerDialog(boolean is24r){
    Calendar calendar = Calendar.getInstance();

    timePickerDialog = new TimePickerDialog(
    AndroidTimeActivity.this,
    onTimeSetListener,
    calendar.get(Calendar.HOUR_OF_DAY),
    calendar.get(Calendar.MINUTE),
    is24r);
    timePickerDialog.setTitle("Set Alarm Time");

    timePickerDialog.show();

}

OnTimeSetListener onTimeSetListener
    = new OnTimeSetListener(){

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        Calendar calNow = Calendar.getInstance();
        Calendar calSet = (Calendar) calNow.clone();

        calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calSet.set(Calendar.MINUTE, minute);
        calSet.set(Calendar.SECOND, 0);
        calSet.set(Calendar.MILLISECOND, 0);

        if(calSet.compareTo(calNow) <= 0){
        //Today Set time passed, count to tomorrow
        calSet.add(Calendar.DATE, 1);
        }

        setAlarm(calSet);
    }
};

private void setAlarm(Calendar targetCal){

    textAlarmPrompt.setText(
    "\n\n***\n"
    + "Alarm is set@ " + targetCal.getTime() + "\n"
    + "***\n");

    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);

}

}

AlarmReceiver.java AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context arg0, Intent arg1) {
Toast.makeText(arg0, "Alarm received!", Toast.LENGTH_LONG).show();
}
}

AndroidManifest.xml AndroidManifest.xml

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".AndroidTimeActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <Receiver
        android:name=".AlarmReciever"
        android:label="@string/title_activity_alarm_reciever"
        android:theme="@style/AppTheme.NoActionBar">
    </Receiver>
</application>

"Receiver" is misspelled twice in your manifest: 您的清单中“ Receiver”拼写错误两次:

android:name=".AlarmReciever"
android:label="@string/title_activity_alarm_reciever"

Should be: 应该:

android:name=".AlarmReceiver"
android:label="@string/title_activity_alarm_receiver"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM