1

私のアプリでは、次の機能を試しています。日時に応じて、ユーザーが何らかの通知を受け取るようにしたい。

例えば:

  1. 9 月 9 日 19.13 メッセージ 1 で通知を受け取る
  2. 9 月 10 日 07.30、メッセージ 2 とともに、
  3. 同日、しかし 11.50、メッセージ 3 など...

アラームとプッシュバー通知を使用しましたが、最初の通知でしか機能しませんでした。だから私はそれを探して、繰り返しアラームマネージャーを使用しなければならないと述べられています.

コードを投稿する前に、いくつか明確にしたいことがあります。保存され、そのアラームを設定しますよね?次に、この一連のコードが 1 ~ 2 分ごとに実行されることを考慮して、もう一度チェックし、次のイベントをフェッチし、その時間にアラームを設定します。

私は正しいですか?

まず、1分ごとにトーストメッセージを表示する繰り返しアラームマネージャーを実装しようとしています(これを行い、トーストメッセージをget_next_event()とset_next_notification()に置き換えると、私が思う仕事をします.-これらの機能は、アラームが 1 つだけ設定されているプロジェクトで正常に動作しています)。

しかし、問題は、サービスを開始したときに何も表示されないことです。

ここに私のコードがあります:

アラーム.java

public class Alarm extends BroadcastReceiver 
    {    
         @Override
         public void onReceive(Context context, Intent intent) 
         {   
             Toast.makeText(context, "Starting Alarm Manager", Toast.LENGTH_LONG).show(); // For example

             PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
             PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
             wl.acquire();

             // Put here YOUR code.
             Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example

             wl.release();
         }

     public void SetAlarm(Context context)
     {
         Toast.makeText(context, "Setting Alarm Manager", Toast.LENGTH_LONG).show(); // For example

         AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
         Intent i = new Intent(context, Alarm.class);
         PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
         am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 , pi); // Millisec * Second * Minute
     }

     public void CancelAlarm(Context context)
     {
         Intent intent = new Intent(context, Alarm.class);
         PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
         AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         alarmManager.cancel(sender);
     }

YourService.java

public class YourService extends Service
{
    Alarm alarm = new Alarm();
    public void onCreate()
    {
        super.onCreate();    
        Toast.makeText(YourService.this, "Service Created", Toast.LENGTH_LONG).show(); // For example

    }

    public void onStart(Context context,Intent intent, int startId)
    {
        Toast.makeText(YourService.this, "Setting from Service", Toast.LENGTH_LONG).show(); // For example

        alarm.SetAlarm(context);
    }

    @Override
    public IBinder onBind(Intent intent) 
    {
        return null;
    }
}

DemoActivity.java

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    buttonStart = (Button) findViewById(R.id.buttonStart);
    buttonStop = (Button) findViewById(R.id.buttonStop);

    buttonStart.setOnClickListener(this);
    buttonStop.setOnClickListener(this);
  }

  public void onClick(View src) {
    switch (src.getId()) {
    case R.id.buttonStart:
        Toast.makeText(ServicesDemo.this, "Button Pressed", Toast.LENGTH_LONG).show(); // For example
      Log.d(TAG, "onClick: starting srvice");
      startService(new Intent(this, YourService.class));
      break;
    case R.id.buttonStop:
      Log.d(TAG, "onClick: stopping srvice");
      stopService(new Intent(this, YourService.class));
      break;
    }
  }

ボタンを押すと、「ボタンが押されました」と表示され、「サービスが作成されました」と表示されますが、アラームが開始されたトーストは表示されません。そしてもちろん、1 分ごとに何も見えません。

これが私のマニフェストです。

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">

    <activity android:name=".ServicesDemo" android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <service android:enabled="true" android:name=".YourService" />
<receiver  android:process=":remote" android:name="Alarm"></receiver>

  </application>
  <uses-sdk android:minSdkVersion="8" />
      <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

</manifest> 

では、コードまたはマニフェストで何を変更する必要があるのでしょうか?

4

1 に答える 1

0

これに使用することをお勧めしますAlarmManager: http://developer.android.com/reference/android/app/AlarmManager.html

于 2012-09-09T12:38:33.503 に答える