报警应用程序需要帮助

发布于 2024-10-08 17:51:15 字数 3199 浏览 2 评论 0原文

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

主类 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();

        }
    };

第二类 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 的类,我无法显示任何对话框或可以使用 TTS。

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

问候

奥迈尔

I am new to Android. I am trying to develop an Alarm Application, which is actually a speaking clock. I just want the clock to use TextToSpeech API and speak out the greeting stuff and the current time as soon as the alarm time is ticked. The speech part is done. And now I want to implement the Alarm functionality. But Initially I am just trying to display a toast after 10 secs in order to check whether my classes are working properly. And I am not getting the desired response and I don't know why ? Following are the classes

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


}

Note: Just ignore the Edittext part in the OnClick() method, I'd use it later on.

Apart from the above problem there are few questions that I would like to ask.

1) How can I implement this app so that when the alarm is set, it can actually run as a service in the notification bar where the original AlarmClock runs. So that even if the app is closed its still running to invoke the alarm message at the right time.

2) I cannot show any Dialog box or can use TTS if the AlarmManager invokes a Class that extends either Service or BroadcastReciever.

3) I would appreciate if some one give me the idea to implement this app, I am sure there are many experts who would have gone through the same application.

Regards

Omayr

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜点 2024-10-15 17:51:15

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

设置闹钟:

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) {
意图 i = new Intent(context, AlarmActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
上下文.startActivity(i);

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

Here is some sample code i used in an alarm clock app hope it helps.

To set the alarm:

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

}

This goes in the onAlarmReceiver class:

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

this will start AlarmActivity whenever it needs to go off. In your case you'd put the toast and speech into the AlarmActivity.

掩耳倾听 2024-10-15 17:51:15

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

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

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

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

How can I implement this app so that when the alarm is set, it can actually run as a service in the notification bar where the original AlarmClock runs. So that even if the app is closed its still running to invoke the alarm message at the right time.

Do not do this. Having a service stick around in memory 24x7 to watch a clock is a waste of RAM and will get you attacked by task killers, reducing your app's effectiveness. Please stick with AlarmManager.

I cannot show any Dialog box or can use TTS if the AlarmManager invokes a Class that extends either Service or BroadcastReciever.

Start an activity, perhaps a dialog-themed activity.

明明#如月 2024-10-15 17:51:15

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

Just got the answer, whatever service, receiver, activity and etc you are using, you need to register it in your AndroidManifest.xml. Or else it wont work

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文