0

私はAndroidを初めて使用します。私は実際に話す時計である目覚まし時計を開発しようとしています。時計にTextToSpeechAPIを使用して、目覚まし時刻がチェックされるとすぐに挨拶の内容と現在の時刻を読み上げたいだけです。スピーチパートが行われます。そして今、私はアラーム機能を実装したいと思います。しかし、最初は、クラスが正しく機能しているかどうかを確認するために、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)このアプリを実装して、アラームが設定されたときに、元の目覚まし時計が実行されている通知バーで実際にサービスとして実行できるようにするにはどうすればよいですか。そのため、アプリが閉じていても、適切なタイミングでアラームメッセージを呼び出すために実行中です。

2)AlarmManagerがServiceまたはBroadcastRecieverのいずれかを拡張するクラスを呼び出す場合、ダイアログボックスを表示できないか、TTSを使用できます。

3)誰かが私にこのアプリを実装するアイデアをくれたら、私は同じアプリケーションを経験したであろう多くの専門家がいると確信しています。

よろしく

オマイヤー

4

3 に答える 3

2

これが目覚まし時計アプリで使用したサンプルコードです。

アラームを設定するには:

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に入れます。

于 2010-12-18T22:53:37.167 に答える
1

このアプリを実装して、アラームが設定されたときに、元の目覚まし時計が実行されている通知バーで実際にサービスとして実行できるようにするにはどうすればよいですか。そのため、アプリが閉じていても、適切なタイミングでアラームメッセージを呼び出すために実行中です。

こんなことしないで。時計を監視するためにサービスを24時間365日メモリに固定しておくと、RAMが無駄になり、タスクキラーに攻撃されて、アプリの効果が低下します。固執してくださいAlarmManager

AlarmManagerがServiceまたはBroadcastRecieverのいずれかを拡張するクラスを呼び出す場合、ダイアログボックスを表示できないか、TTSを使用できます。

アクティビティ、おそらくダイアログをテーマにしたアクティビティを開始します。

于 2010-12-18T19:56:29.320 に答える
0

答えが得られたばかりです。使用しているサービス、レシーバー、アクティビティなどが何であれ、AndroidManifest.xmlに登録する必要があります。そうでなければ、それは機能しません

于 2010-12-21T09:47:58.697 に答える