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