0

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

     } 
    }; 

二等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)如果有人给我实现这个应用程序的想法,我将不胜感激,我确信有许多专家会经历同样的应用程序。

问候

Omayr

回答

0

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

1

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

不要这样做。有一种服务在内存中全天候存储以查看时钟是RAM的浪费,并会让你受到任务杀手的攻击,从而降低了你的应用程序的效率。请坚持AlarmManager

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

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

+0

感谢您的洞察力,如果我只是坚持报警管理器,我的报警服务仍然可以正常工作。我想在警报设置完成后继续运行,即使主应用程序已关闭?此外,我无法通过警报管理器启动服务,并且您可以告诉我问题可能是什么?请尽快回复,需要您的帮助 – Omayr 2010-12-18 20:47:24

+0

我不确定其他类是否被调用,因为我确信服务没有运行。有没有适当的程序在你的项目或包中包含新类? – Omayr 2010-12-18 20:53:43

+0

@CommonsWaew:我正在使用getService和PendingIntent。如何将我的活动和服务添加到清单?我没有看到有人在任何论坛上对此发表评论。由于我对Android新手知之甚少,如果你不能,我可以让你的Gmail或Skype的ID,让我可以与你谈话。 – Omayr 2010-12-18 21:27:10

2

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

要设置闹钟:

私人无效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类:

公共无效的onReceive(上下文语境,意图意图){ 意向i = new Intent(context,AlarmActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); }

这将启动AlarmActivity,只要它需要关闭。在你的情况下,你会把敬酒和讲话放到AlarmActivity中。

+0

代码片段的格式被搞砸了。当我回到电脑时,我试图修复它们。 – Tim 2010-12-18 22:55:43