应用程序关闭时从广播接收器运行任务[Android]

时间:2016-08-05 09:16:02

标签: android sqlite broadcastreceiver

我有一个应用程序可以在发出通知时下载数据并将其放入SQLite数据库。该应用程序正在使用时工作正常,但我也需要在应用程序关闭时才能正常工作。

我已经在应用程序关闭时调用了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

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);
}

3 个答案:

答案 0 :(得分:1)

启动服务
onReceive()

方法,因为你可以一个接一个地获得多个广播。

答案 1 :(得分:0)

编写代码以在OnRecieve()方法内的PackReciever数据库中添加数据,因为这是您接收推送通知的地方。

答案 2 :(得分:0)

不要在接收者内部呼叫活动。而是使用IntentService下载所有包。一旦完成其工作,IntentService就会自动完成。

覆盖其onHandleIntent()方法并下载包并保存到数据库。