警报应用程序需要帮助

时间:2010-12-18 18:55:04

标签: android service broadcastreceiver alarmmanager android-pendingintent

我是Android新手。我正在尝试开发一个报警应用程序,它实际上是一个发言时钟。我只想让时钟使用TextToSpeech API,并在闹钟时间勾选后立即说出问候语和当前时间。演讲部分完成。现在我想实现报警功能。但最初我只是试图在10秒后显示一个吐司,以检查我的课程是否正常工作。我没有得到理想的回应,我不知道为什么?以下是课程

主类aClockActivity

public class aClockActivity extends Activity {
    /** Called when the activity is first created. */
  private PendingIntent mAlarmSender;

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.main);

        Button button1 = (Button)findViewById(R.id.buttonOn);
        button1.setOnClickListener(mStartAlarmListener);
        Button button2 = (Button)findViewById(R.id.buttonOff);
        button2.setOnClickListener(mStopAlarmListener);

    }

 private OnClickListener mStartAlarmListener = new OnClickListener() {
        public void onClick(View v) {
            // We want the alarm to go off 30 seconds from now.
            //long firstTime = SystemClock.elapsedRealtime();
            EditText Ehour = (EditText) findViewById(R.id.hour);
            EditText Eminute = (EditText) findViewById(R.id.minute);

            CharSequence CharHour = Ehour.getText();
            CharSequence CharMinute = Eminute.getText();
            int hour = Integer.parseInt(CharHour.toString());
            int minute = Integer.parseInt(CharMinute.toString());

            Calendar cal = Calendar.getInstance();
            cal.setTimeInMillis(System.currentTimeMillis());
           // calendar.add(Calendar.MINUTE, 1);
            cal.add(Calendar.SECOND, 10);

            mAlarmSender = PendingIntent.getBroadcast(aClockActivity.this,
                    0, new Intent(aClockActivity.this, Alarm_Broadcast.class), 0);


            // Schedule the alarm!
            AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP,
                            cal.getTimeInMillis(), mAlarmSender);

            // Tell the user about what we did.
            Toast.makeText(aClockActivity.this, "The Alarm is Set",
                    Toast.LENGTH_LONG).show();
        }
    };

    private OnClickListener mStopAlarmListener = new OnClickListener() {
        public void onClick(View v) {
            // And cancel the alarm.
            AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
            am.cancel(mAlarmSender);

            // Tell the user about what we did.
            Toast.makeText(aClockActivity.this, "Setting off the alarm",
                    Toast.LENGTH_LONG).show();

        }
    };

Second Class Alarm_Broadcast

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


}

注意:只需忽略OnClick()方法中的Edittext部分,稍后我就会使用它。

除了上述问题外,我想问的问题很少。

1)如何实现此应用程序,以便在设置警报时,它实际上可以作为服务在原始AlarmClock运行的通知栏中运行。因此,即使应用程序已关闭,它仍然会在正确的时间运行以调用警报消息。

2)如果AlarmManager调用扩展Service或BroadcastReciever的Class,我无法显示任何对话框或可以使用TTS。

3)如果有人给我实现这个应用程序的想法,我将不胜感激,我相信有很多专家会通过相同的应用程序。

此致

Omayr

3 个答案:

答案 0 :(得分:2)

以下是我在闹钟应用程序中使用的示例代码,希望它有所帮助。

设置闹钟:

private void setAlarm(){

    Context context = getApplicationContext();

    AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, OnAlarmReceiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    myCal = Calendar.getInstance();
    myCal.setTimeInMillis(TIME_THE_ALARM_SHOULD_GO_OFF_AS_A_LONG);
    mgr.set(AlarmManager.RTC_WAKEUP, myCal.getTimeInMillis(), pi);
    Log.i(myTag, "alarm set for " + myCal.getTime().toLocaleString());
    Toast.makeText(getApplicationContext(),"Alarm set for " + myCal.getTime().toLocaleString(), Toast.LENGTH_LONG).show();

}

这是onAlarmReceiver类:

public void onReceive(Context context,Intent intent){             Intent i = new Intent(context,AlarmActivity.class);             i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);             context.startActivity(ⅰ); }

这将在需要关闭时启动AlarmActivity。在你的情况下,你将吐司和语音放入AlarmActivity。

答案 1 :(得分:1)

  

如何实现此应用程序,以便在设置警报时,它实际上可以作为服务在原始AlarmClock运行的通知栏中运行。因此,即使应用程序已关闭,它仍然会在正确的时间运行以调用警报消息。

不要这样做。在内存中全天候服务以观看时钟是浪费内存并且会让你被任务杀手攻击,从而降低应用程序的效率。请坚持AlarmManager

  

如果AlarmManager调用扩展Service或BroadcastReciever的Class,我无法显示任何对话框或可以使用TTS。

开始一项活动,也许是以对话为主题的活动。

答案 2 :(得分:0)

得到答案,无论您使用的服务,接收器,活动等,都需要在AndroidManifest.xml中注册。否则它不会工作