【问题标题】:Help required in Alarm Application警报应用程序所需的帮助
【发布时间】:2010-12-18 18:55:03
【问题描述】:

我是 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();

        }
    };

二级报警广播

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) 我怎样才能实现这个应用程序,以便在设置闹钟时,它实际上可以作为服务在原始闹钟运行的通知栏中运行。这样即使应用程序关闭,它仍然会在正确的时间调用警报消息。

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

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

问候

奥马尔

【问题讨论】:

    标签: android service broadcastreceiver alarmmanager android-pendingintent


    【解决方案1】:

    这是我在闹钟应用中使用的一些示例代码,希望对您有所帮助。

    设置闹钟:

    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(i); }

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

    【讨论】:

    • 代码 sn-ps 的格式搞砸了。当我回到我的电脑时,我会尝试修复它们。
    【解决方案2】:

    我怎样才能实现这个应用程序,以便在设置闹钟时,它实际上可以作为服务在原始闹钟运行的通知栏中运行。这样即使应用程序关闭,它仍然会在正确的时间调用警报消息。

    不要这样做。让服务在内存中 24x7 全天候运行是对 RAM 的浪费,并且会让您受到任务杀手的攻击,从而降低您的应用程序的效率。请坚持使用AlarmManager

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

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

    【讨论】:

    • 感谢您的见解,如果我坚持使用闹钟管理器,我的闹钟服务是否仍能像正常闹钟一样工作。我想在设置警报后让它继续运行,即使主应用程序已关闭?此外,我无法通过警报管理器和待处理的 Intent 启动服务,您能告诉我问题出在哪里吗?请尽快回复,需要您的帮助
    • 我不确定其他类是否被调用,因为我确定服务没有运行。是否有任何适当的程序可以在您的项目或包中包含新类?
    • @CommonsWaew:我正在使用 getService 和 PendingIntent。如何将我的活动和服务添加到清单中?我没有看到有人在任何论坛上谈论它。由于我是Android新手,所以了解不多。如果你不这样做,我可以给你 gmail 或 skype id,以便我可以和你交谈。
    【解决方案3】:

    刚刚得到答案,无论您使用什么服务、接收器、活动等,您都需要在您的 AndroidManifest.xml 中注册它。不然就不行了

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多