-1

強制終了してもアプリケーションが定期的にネットワークジョブを実行したい。アラームマネージャーとブロードキャスト受信機が強制終了アプリ

これは強制終了するまで機能します。 私は行方不明ですか?また

私はこのマニフェストに追加した場合:アンドロイド:プロセス=「リモート」を - それは(アプリのよう力が閉じている)onReceiveメソッドをトリガしないですが、ログに私が見つかりました:トリガ:

V/AlarmManager :CMP = com.cryptorulezz.cryptosignals/.Code.Alarm PKG:com.cryptorulezz.cryptosignalsは

マイコード:

:私は MainActivityにアラームを設定する方法

public class Alarm extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     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 
     System.out.println("ALARM !!!!!!!!!!!!!!!!!!!!"); 

     wl.release(); 
    } 

public void setAlarm(Context context) 
{ 
    AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    //Intent i = new Intent(context, Alarm.class); 
    Intent i = new Intent("Coinsider.START_ALARM"); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 1, 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); 
    } 
} 

Alarm alarm = new Alarm(); 
alarm.setAlarm(this); 

マニフェスト:

<receiver android:name=".Code.Alarm" android:exported="false"> 
     <intent-filter> 
      <action android:name="Coinsider.START_ALARM" > 
      </action> 
     </intent-filter> 
    </receiver> 
+0

https://stackoverflow.com/a/39739886/3363481 – earthw0rmjim

+0

ユーザーが伝えるためにあなたがあなたのアプリを、使用しないことを決定した場合彼らは間違っているのですか?強制終了は手作業であり、あなたのアプリは動作を続けるべきではありません。 –

+0

@RichardLeMesurier一部のアプリは強制終了後に通知を表示でき、クラウドメッセージングであるかどうかはわかりません。 – Vadim

答えて

0

アプリが殺さ力を取得したら、それは意図とインテントフィルタトリガされませんを受信しません。これを克服するために、あなたのプロセスの1つが生存しているかどうかをチェックし、そうでなければ起動するシステムイベント(android.intent.action.BOOT_COMPLETEDなど)に依存する一種のwatchDogを提案します。う

 Intent i = new Intent(ctx, WatchDogEventReceiver.class); // explicit intent 
     PendingIntent patTheDog = PendingIntent.getBroadcast(ctx, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); 
     alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, now.getTimeInMillis(), 5000, 
       patTheDog); 

最終、WatchDogEventReceiver

<receiver 
     android:name="it.angelic.receivers.WatchDogSetupReceiver" 
     android:process=":souliss_process"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      <action android:name="android.intent.action.USER_PRESENT"/> 
     </intent-filter> 
    </receiver> 

クラスWatchDogSetupReceiverその後、犬が生きているかどうかを確認し、必要に応じて新しいものを発射します:マニフェストでは、あなたのこのような何かをしているD」単純に必要な殺害可能な仕事をしてください。ウォッチドッグは、イベントが発生するたびにすべての画面で起動されるため、光を当て続けることが重要です。このソリューションは、非最適であるが、それでも力を殺すの後に動作します:

public class WatchDogEventReceiver extends BroadcastReceiver { 


@Override 
public void onReceive(final Context ctx, final Intent intent) { 
    Log.d(Constants.TAG + ":WatchDog", "WatchDog.onReceive() called, looking for Dataservice:"); 
    ActivityManager manager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 
    //Fire Service 
    Intent eventService = new Intent(ctx, YourDamnService.class); 
    ctx.startService(eventService);//sempre, ci pensa poi lui 


} 
+0

それを試していますが、SoulissDataService.classは何ですか? – Vadim

+0

それは自分のアプリから取ったコードで、このアプローチを説明するのに便利です。不明な点は何ですか?なぜあなたは-1? – Shine

+0

その1私は – Vadim

関連する問題