私はネットから非常に少量のデータをダウンロードする小さな小さなアプリケーションを持っています。それ以外はうまく動作し、正しくダウンロードされますが、接続が変更されると(Wi-Fi範囲を失う)、ダウンロードは完了せず、ユーザーはデータを取得しません。IntentServiceでデータを読み込んでいるときの接続の変更を処理する
私はこれをどう対処するか考えています。私は自分のIntentServiceと通信する私の主なアクティビティにBroadcastReceiverを設定しました。 IntentServiceがダウンロードを完了すると、受信者の登録を解除します。このすべてをトップにするために、私はブロードキャスト受信者を設定して接続の変更を監視し、接続が利用可能かどうかを確認し、接続がある場合、メインアクティビティはインテントを送信してダウンロードを開始します。ここを参照してください:
主な活動を:
public class Sample extends Activity {
private BroadcastReceiver connectivityReceiver;
private ResponseReceiver receiver;
protected void onCreate(Bundle sis){
super.onCreate(sis);
IntentFilter intentFilter = new IntentFilter(
"android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (Network.isOnline()) {
fireUpDownloadingIntent();
}
}
}, intentFilter);
}
public class ResponseReceiver extends BroadcastReceiver {
public static final String ACTION_RESP = "com.irough.intent.action.URL_LOADED";
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getBooleanExtra(DLService.DOWNLOAD_COMPLETE, false) {
unRegisterReceiver(connectivityReceiver);
}
}
}
}
DLService.java:
public class DLService extends IntentService {
public static final String DOWNLOAD_COMPLETE = "dlc";
public DLService() {
super("DLService");
}
@Override
protected void onHandleIntent(Intent intent) {
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ResponseReceiver.ACTION_RESP);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putExtra(DOWNLOAD_COMPLETE, true);
sendBroadcast(broadcastIntent);
}
}
コードを約うまく動作するはずですが、それを行うにはより簡単か良い方法はありますか?サービスで行う必要はありません。接続が落ちたときにAsynctaskが私を閉じてしまい、ダウンロードアクションをサービスに入れなければなりません。
はい、私はそれを簡単に行うことができます。しかし、私のアプリは "最も革新的な電話番号を提供する"アプリだと考えられているので、ユーザーに少なくとも "これをやり直すことはできませんでした"というメッセージをできるだけ表示させたいと思っています。 –
あなたのコメントを解決するために私の投稿を編集しました –