2010-12-19 9 views
13

私はアラームアプリケーションを開発したいと思います。 アプリケーションは次のように動作するはずです:アラームアプリケーションの開発

  • 打ち上げそれ
  • 活動は私がアラーム時刻になると、私はアプリケーション
  • を閉じることができ
  • アラームを設定することができます
  • 時間を示し、 (デバイスがロックされていても)アクティビティを開始します。

このサンプルを適合させようとしましたが、アラーム時刻が来たらアクティビティを起動できません。

public class OnAlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i(ClockActivity.LOG_TAG, "OnAlarmReceiver::onReceive"); 
     WakefulIntentService.sendWakefulWork(context, AlarmService.class); 
    } 
} 

これは:

Intent intent = new Intent(this, OnAlarmReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.SECOND, 10); 
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, cal.getTimeInMillis(), 
      pendingIntent); 

このOnAlarmReceiverクラスである:

私は(I活動のonCreate方法でこのコードを挿入したテストのために)セットアップにアラームをこのコードを使用しますサービスクラス:

public class AlarmService extends WakefulIntentService { 

    public AlarmService(String name) { 
     super(name); 
    } 

    @Override 
    protected void doWakefulWork(Intent intent) { 
     Log.i(ClockActivity.LOG_TAG, "AlarmService::doWakefulWork"); 
     Intent newIntent = new Intent(getApplicationContext(), ClockActivity.class); 
     newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     newIntent.setAction(ClockActivity.ALARM_ACTION); 
     getApplicationContext().startActivity(newIntent); 
    } 
} 

これは、setuが設定されているマニフェストの部分ですサービスと受信者:

<receiver android:name=".OnAlarmReceiver"></receiver> 
<service android:name=".AlarmService"></service> 

doWakefulWorkメソッドは呼び出されません。

+5

郵便あなたのコードは、あなたが取得したすべてのエラーを報告しても、あなたの活動を起動し、してみてください好ましく...それがお手伝いします私たちはあなたを助けます。 – st0le

+0

画面がオンのときに機能しますか?私はちょうどその問題がウェイクロックに関連しているかどうかを調べようとしています。 – Andrew

+0

@PayPal_Timは(ここでコメントを追加するのではなく)「回答」で質問したので、Log.i(ClockActivity.LOG_TAG、 "OnAlarmReceiver :: onReceive" ); '実行? –

答えて

0

私は同様の問題を抱えていました。私は受信者をマニフェストから削除し、registerReceiverで登録するコードを設定しました。

1

チェックこのアウト:http://blog.nelsondev.net/?p=124

使用して "alarmmanager" 私はこのアプリ作った

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
    AlarmCal.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, 
    pendingAlarmIntent); 

3

AlarmActivity.java

package com.foo; 
import pack.breceiver.MyBroadcastReceiver; 
import android.app.Activity; 

import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

import android.app.Activity; 
import android.os.Bundle; 

public class AlarmActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void startAlert(View view) { 
     EditText text = (EditText) findViewById(R.id.time); 
     int i = Integer.parseInt(text.getText().toString()); 
     Intent intent = new Intent(this, MyBroadcastReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(
       this.getApplicationContext(), 234324243, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
       + (i * 1000), pendingIntent); 
     Toast.makeText(this, "Alarm set in " + i + " seconds", 
       Toast.LENGTH_LONG).show(); 
    } 
} 
を210

MyBroadcastReceiver.java

package pack.breceiver; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Vibrator; 
import android.widget.Toast; 


public class MyBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Don't panik but your time is up!!!!", 
       Toast.LENGTH_LONG).show(); 

     /*// Vibrate the mobile phone 
     Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
     vibrator.vibrate(2000); */ 
    } 
} 
0

あなたは多分、インスタンス化例外を取得していますか?

あなたはあなたのサービスの公共何の引数のコンストラクタがないはずです。

public class AlarmService extends WakefulIntentService { 

    public AlarmService() { 
     super("AlarmService"); 
    } 
    // etc 
} 
関連する問題