Android 报警应用程序中需要帮助

Android 报警应用程序中需要帮助,android,service,broadcastreceiver,alarmmanager,android-pendingintent,Android,Service,Broadcastreceiver,Alarmmanager,Android Pendingintent,我是Android新手。我正在尝试开发一个闹钟应用程序,它实际上是一个会说话的时钟。我只希望时钟使用TextToSpeechAPI,在闹钟一响,就说出问候语和当前时间。演讲部分结束了。现在我想实现报警功能。但最初我只是想在10秒后展示一个祝酒词,以检查我的课程是否正常工作。我没有得到想要的回应,我不知道为什么?以下是课程 主类ACLock活动 public class aClockActivity extends Activity { /** Called when the activi

我是Android新手。我正在尝试开发一个闹钟应用程序,它实际上是一个会说话的时钟。我只希望时钟使用TextToSpeechAPI,在闹钟一响,就说出问候语和当前时间。演讲部分结束了。现在我想实现报警功能。但最初我只是想在10秒后展示一个祝酒词,以检查我的课程是否正常工作。我没有得到想要的回应,我不知道为什么?以下是课程

主类ACLock活动

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) 我如何实现此应用程序,以便在设置闹钟时,它可以作为原始AlarmClock运行的通知栏中的服务实际运行。因此,即使应用程序已关闭,它仍在运行,以便在正确的时间调用报警消息

2) 如果AlarmManager调用扩展服务或BroadcastReceiver的类,则我无法显示任何对话框或可以使用TTS

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

问候

奥马尔

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

不要这样做。让一个服务24小时不间断地留在内存中看时钟是对内存的浪费,会让你受到任务杀手的攻击,降低你的应用程序的效率。请坚持使用
AlarmManager

如果AlarmManager调用扩展服务或BroadcastReceiver的类,则我无法显示任何对话框或可以使用TTS

启动一个活动,可能是一个以对话为主题的活动

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

不要这样做。让一个服务24小时不间断地留在内存中看时钟是对内存的浪费,会让你受到任务杀手的攻击,降低你的应用程序的效率。请坚持使用
AlarmManager

如果AlarmManager调用扩展服务或BroadcastReceiver的类,则我无法显示任何对话框或可以使用TTS


启动一个活动,可能是一个以对话为主题的活动。

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

要设置警报,请执行以下操作:

私有void setAlarm(){

这适用于onAlarmReceiver类:

公共void onReceive(上下文、意图){ 意图i=新意图(上下文,AlarmActivity.class); i、 addFlags(意图、标志、活动、新任务); 背景。起始触觉(i); }


这将在需要时启动AlarmActivity。在您的情况下,您可以将祝酒词和讲话放入AlarmActivity。

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

要设置警报,请执行以下操作:

私有void setAlarm(){

这适用于onAlarmReceiver类:

公共void onReceive(上下文、意图){ 意图i=新意图(上下文,AlarmActivity.class); i、 addFlags(意图、标志、活动、新任务); 背景。起始触觉(i); }


这将在需要时启动AlarmActivity。在您的情况下,您将在AlarmActivity中加入祝酒词和讲话。

刚刚得到答案,无论您使用的是什么服务、接收者、活动等,您都需要在AndroidManifest.xml中注册它。否则它将无法工作。

刚刚得到答案,无论是什么服务、接收者、行动您正在使用的ivity等,您需要在您的AndroidManifest.xml中注册它。否则它将无法工作

感谢您的洞察力,如果我坚持使用Alarm Manager,我的闹钟服务是否仍能像正常闹钟一样工作。我想在设置闹钟后保持它运行,即使主应用程序关闭?此外,我无法启动service via alarm manager and pending Intent您能告诉我问题出在哪里吗?请尽快回复,需要您的帮助我不确定是否调用了其他类,因为我确定该服务未运行。是否有适当的程序将新类包含在您的项目或包中?@Commonswaw:我正在使用getService和PeNdingContent。我如何将我的活动和服务添加到清单中?我没有在任何论坛上看到人们谈论它。因为我对Android不太了解。如果你不知道,我可以给你我的gmail或skype id,这样我就可以和你对话了。谢谢你的洞察力,如果我坚持使用Alarm Manager,我的Alarm服务还会继续吗rk作为一个正常的闹钟工作。我想保持它运行,一旦闹钟设置,即使主应用程序关闭?此外,我无法通过alarm manager启动服务和等待的意图,你能告诉我问题可能是什么吗?请尽快回复,需要你的帮助我不确定其他类是否被调用,因为我确定目前,该服务尚未运行。是否有适当的程序将新类包含在您的项目或包中?@commonswaw:我正在使用getService和PendingEvent。如何将我的活动和服务添加到清单中?我没有在任何论坛上看到有人谈论它。因为我对Android不太了解。如果您不知道,我可以获取我的活动和服务吗你可以使用gmail或skype id,这样我就可以和你聊天了。代码片段的格式设置出了问题。当我回到我的电脑时,我会尝试修复它们。t
    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();

}