2016-08-05 11 views
0

通知を発行するとデータをダウンロードしてSQLiteデータベースに格納するアプリがあります。これは、アプリケーションが使用中に正常に動作しますが、私はそれもアプリケーションが閉じられているときに動作する必要があります。アプリが閉じている間に放送受信機からタスクを実行する[Android]

私はBroadcastReceiverを設定していますが、これはアプリケーションが終了したときに呼び出されますが、データベースへの追加を続ける方法がわかりません。

のAndroidManifest.xml

<manifest.... 

    <application... 

    <receiver android:name=".broadcast.PacksReceiver" > 
     <intent-filter> 
      <action android:name="ADD_PACK" > 
      </action> 
     </intent-filter> 
    </receiver> 

をPacksReceiver

public class PacksReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.d("PacksReceiver", "onReceive"); 

    String message = intent.getStringExtra("message"); 

    PacksActivity pa = new PacksActivity(); 
    pa.downloadPack(null, message); 
    } 
} 

PacksActivity

0123:ここ

は、私が使用していたコードです

public void downloadPack(View v, String thisPackID){ 
    Log.d("download", "pack"); 
    //THIS LOG IS CALLED EVERYTIME 
    vRef = v; 
    if(vRef != null){ 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       onScreenProgressBar = (ProgressBar) vRef.findViewById(R.id.onScreenProgress); 
       onScreenProgressCircle = (ProgressBar) vRef.findViewById(R.id.onScreenProgressCircle); 
       dlPercent = (TextView) vRef.findViewById(R.id.dlPercent); 

       onScreenProgressCircle.setVisibility(View.VISIBLE); 

       onScreenProgressBar.setVisibility(View.VISIBLE); 
       onScreenProgressCircle.setProgress(0); 
      } 
     }); 
    } 
    if(thisPackID == null){ 
     thisPackID = pack_id; 
    } 

    String url = MyApp.getAppContext().getString(R.string.serverURL) + 
      MyApp.getAppContext().getString(R.string.getAppendixA) + "/" + thisPackID; 
    Intent appA_Intent = new Intent(Intent.ACTION_SYNC, null, this, DownloadService.class); 
    appA_Intent.putExtra("url", url); 
    appA_Intent.putExtra("onCreate", "false"); 
    appA_Intent.putExtra("receiver", downloadPackReceiver); 
    appA_Intent.putExtra("downloadType", "GET_APPENDIX_A"); 
    appA_Intent.putExtra("requestId", 101); 
    MyApp.getAppContext().startService(appA_Intent); 
} 

答えて

1

onReceive() 

方法からサービスを開始

0

OnRecieve()メソッド内のPackRecieverのデータベースにデータを追加するコードを記述します。これは、プッシュ通知を受け取る場所であるためです。

0

受信者の中でアクティビティを呼び出さないでください。代わりに、IntentServiceを使用してすべてのパックをダウンロードしてください。 IntentServiceは、作業が完了すると自動的に終了します。

onHandleIntent()メソッドをオーバーライドし、パックをダウンロードしてデータベースに保存します。あなたがみとめ放送を次々に取得することができますので、

関連する問題