我尝试使用'AlarmManager'设置闹钟,但没有成功,出了什么问题?

时间:2015-05-30 09:41:13

标签: java android

我按照教学试图注册闹钟,它应该显示“TEST”五秒后,但它没有显示任何 编辑 - 虽然你想在闹钟后做五秒钟,但实际上他们希望每天在固定的时间内执行 -

我应该完成所有设置,哪里出错了?

--- AndroidManifest.xml

        <receiver android:name=".AlarmClass" android:process=".abc">//What is the role of .abc?
    </receiver>

--- MainActivity.java

    public void AddAlarm(View view){
    AlarmManager alm;
    PendingIntent pen;
    Calendar cal;

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy;MM;dd;HH;mm;ss");
    Date curDate = new Date(System.currentTimeMillis()) ; 
    String str = formatter.format(curDate);
    String[] aArray = str.split(";");//Split time string

    cal = Calendar.getInstance();
    cal.set(Integer.parseInt(aArray[0]), Integer.parseInt(aArray[1]), Integer.parseInt(aArray[2]), Integer.parseInt(aArray[3]), Integer.parseInt(aArray[4]), Integer.parseInt(aArray[5]) + 3);
    Intent intent = new Intent(this,AlarmClass.class);
    alm = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
    pen = PendingIntent.getBroadcast(this,0,intent,PendingIntent.FLAG_ONE_SHOT);//If I want to set multiple alarms should change the second argument?
    alm.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),pen);
}

--- AlarmCless.java

public class AlarmClass extends BroadcastReceiver {
@Override
public void onReceive (Context context,Intent intent){
        Toast.makeText(context, "TEST", Toast.LENGTH_LONG).show();
}

}

如果我想设置多个警报,例如,五秒钟和十秒钟后,传递不同的参数 例如

Toast.makeText(context,teststring,Toast.LENGTH_LONG).show();

但'teststring'看起来不一样,怎么办?

1 个答案:

答案 0 :(得分:1)

Manifest.xml

中指定接收者的操作标记
 <receiver android:name=".AlarmClass" android:process=".abc">
   <action android:name="your_action" />
 </receiver>

此处android:process=".abc"指定广播接收器应运行的进程的名称 声明发送广播的意图。

  Intent intent = new Intent("your_action");
    alm = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);

使用自己的通知ID声明PendingIntent,因为没有两个通知应该具有相同的ID,它们具有相同的ID,它们会被覆盖。

pen = PendingIntent.getBroadcast(this,notification_id,intent,PendingIntent.FLAG_ONE_SHOT);//If I want to set multiple alarms should change the second argument?

由于您需要在5秒后立即发送广播,请使用System.currentTimeMillis()+5000

alm.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,pen);

如果您想在10秒后发送另一个广播,请按照上述相同步骤但使用不同的notification_id并使用System.currentTimeMillis()+ 10000而不是System.currentTimeMillis()+5000