2016-10-30 10 views
0

私はAndroid 4.1でうまくいったカウントダウンタイマー付きのウィジェットを持っていました。しかし、私は5.1で試して、もう動作しません。ブログやドキュメンテーションそのアンドロイドのバージョン毎秒WakefulBroadcastReceiverを起動します

でその変化を読み取​​るこれは私のAppWidgetProviderクラスで

@Override 
    public void onEnabled(Context context) { 
     super.onEnabled(context); 
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+ 100 * 1, 1000 , pi); 
    } 

をonEnabledで私のコードで私はsetRepeatingはより多くのサポートではないと私はsetExactか何かを使用することをお読みください。それも仕事をしなかった。

最善の解決策は、WakefulBroadcastReceiverを実装しているが、私は、ウィジェットに

感謝を更新するために、彼のonRecive方法秒ごとに起動する方法を知ってはいけません!

+0

これは私が読んだ投稿です https:// stackoverflow。com/questions/34074955/android-exact-alarm-is-always-3-off-off/34085645 https://code.google.com/p/android/issues/detail?id=82001 – benoffi7

+0

私はこれを使用しています私のアプリのベースとしてコードhttp://code4reference.com/2012/07/android-homescreen-widget-with-alarmmanager/それはAndroid 4.1で動作します – benoffi7

答えて

2

私は心からこのタイマーは短いもののためだったことを願ってのAndroid 4.1で

をうまく働い何カウントダウンタイマーとウィジェットを持っていました。あなたのアプリのウィジェットが隠されているときは、毎秒何かするのはかなり悪いです。特に、の大部分はです。 Googleは開発者がこのようなことをしないようにするための措置を取る必要があります。

これはAppWidgetProviderクラスGoogleは、このようなことをやってから、開発者を防ぐためにやったの

一つsetRepeating() cannot have a period of less than one minuteのAndroid 5.1、で文書化されていない変更を追加している中でonEnabled私の中に私のコードです。

私はsetExactなどを使用します。それも仕事をしなかった。

私はあなたがそうした方法で5秒ごとに細分することができると思います。それはsetRepeating()よりも優れていますが、毎秒細かくなるとは思いません。

最善の解決策は、あなたの問題を解決しませんWakefulBroadcastReceiver

を実装しています。

フォアグラウンドサービスを起動し、インプロセスのタイミングエンジン(例:ScheduledExecutorService)を使用して毎秒コントロールを取得し、アプリウィジェットを更新できます。あなたのサービスは永遠に

  • スリープモードに生きていけないだろう

    • 、Dozeモード、アプリスタンバイ、などはまだ私が希望

    • を実行しているから、あなたのコードを防ぐことができます:ちょうどことを心に留めてGoogleがこの種の行動を阻止するために措置を講じると、ショックを受けることはありません。

  • 関連する問題