1

私は、このようにサーバーにポストを5分ごとに送信するアンドロイドアプリを開発していますので、サーバーは電話機が接続されているかどうかを確認できます。AlarmManagerが必ずしも実行されない

AlarmManagerを使用しています。PendingIntentBroadcastReceiverに送信し、投稿をサーバーに送信しています。

AlarmManagerクラスは、これを行うための正しい方法
Intent myIntent = new Intent(Inicio.this, NetworkStatusReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(Inicio.this, 
                 0, 
                 myIntent, 
                 0); 
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
int interval = 60000*5; 
manager.setRepeating(AlarmManager.RTC_WAKEUP, 
        System.currentTimeMillis(), 
        interval, 
        pendingIntent); 

です:問題は、それが常に実行されていないということでしょうか?

私は約5.0以上のアンドロイド版を研究していたので、電源管理は以前のアンドロイド版とは異なります。おそらくAlarmManager.RTC_WAKEUPオプションが5.0以上のAndroidバージョンで動作していない可能性があります。

+0

特定の電話機で起きたことはありますか? – Saveen

+0

@Saveenこのアプリはさまざまなアンドロイドバージョンの異なるデバイスで使用されます。ほとんどの場合、5.0.2または6. +(古いデバイスには4. +を実行するものがありますが、これらのデバイスでは正常に動作しているようです) –

答えて

0

私はいくつかの研究を行い、うまくいくと思われるものを見つけました。今朝から私はそれを実装し、行動は非常に改善されました。私はBroadcastReceiverを持っていることを知っていました。アラームがトリガーされたときに、ただちにアラームを設定して、もう一度BroadcastReceiverに別のアラームを設定することができました。

I(アラームPendingIntentは異なる活動からトリガすることができるので)もPendingIntentためのフラグPendingIntent.FLAG_UPDATE_CURRENTを使用

Activityのコードはこのようなものになるだろう:

Intent myIntent = new Intent(context, NetworkStatusReceiver.class); 
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    final AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    manager.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + timeInMillis, pendingIntent); 

とコードBroadcastReceiver.OnReceive()メソッドは同じコードになりますので、アラームはすべてSystem.currentTimeMillis() + timeInMillisをトリガーします(このようにしてsetRepeating()メソッドを作成します)

この方法では、私はAlarmManagerset()メソッドからのアンドロイドバージョンで正常に動作するので、アラームが常に発生するようです。

関連する問題