2016-03-16 51 views
0

我正在关注AlarmManager的教程。我已经在模拟器中运行了教程的代码,但是警报没有关闭。 另外,本教程使用Calendar的第一个Java类中的克隆,为什么它在这里克隆?AlarmManager在Android中不工作

任何帮助将不胜感激。

下面是代码:

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 [email protected] " + 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

public class AlarmReceiver extends BroadcastReceiver { 

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

的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> 

回答

1

“接收器” 在您的清单拼错了两次:

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

应该是:

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