3

ユーザーは任意の数のダウンロードを追加できますが、ダウンロードは次々に開始されます。つまり、次のダウンロードは現在のダウンロードの完了後にのみ開始されます。ユーザーは、新しいダウンロードを追加するためにダウンロードの進行状況を示すアクティビティから離れます。ダウンロードする新しいファイルが追加されると、アプリケーションはダウンロードの進行状況を示すアクティビティに戻り、ダウンロードの進行状況が表示されます。追加され、現在追加されているファイルを保留中のダウンロードとして保持します。ダウンロードが完了するとすぐに、保留中のダウンロードがダウンロードを開始します。このようにして、ユーザーは任意の数のダウンロードを追加でき、それらは次々に開始されます。それらをバックグラウンドで連続してダウンロードしたい-次々と。ListView で進行状況とステータスを表示したい。したがって、ListView は次のようになります。

File1 ...進行中 39% と言う

File2....保留中

File3... 保留中

File4...保留中

4

1 に答える 1

1

IntentServices を使用することをお勧めします。

public class FileDownloader extends IntentService {

private static final String TAG = FileDownloader.class.getName();



public FileDownloader() {
    super("FileDownloader");
}

@Override
protected void onHandleIntent(Intent intent) {
    String fileName = intent.getStringExtra("Filename");
    String folderPath = intent.getStringExtra("Path");
    String callBackIntent = intent
            .getStringExtra("CallbackString");

     // Code for downloading

     // When you want to update progress call the sendCallback method

}

private void sendCallback(String CallbackString, String path,
        int progress) {

        Intent i = new Intent(callBackIntent);
        i.putExtra("Filepath", path);
        i.putExtra("Progress", progress);
        sendBroadcast(i);

}

}

次に、ファイルのダウンロードを開始するには、次のようにします。

Intent i = new Intent(context, FileDownloader.class);
i.putExtra("Path", folderpath);
i.putExtra("Filename", filename);
i.putExtra("CallbackString",
            "progress_callback");
startService(i);

ここで、他のブロードキャストと同じように「progress_callback」コールバックを処理し、受信者を登録する必要があります。この例では、ファイルパスを使用して、進行状況のビジュアルを更新する必要があるファイルを決定します。

サービスをマニフェストに登録することを忘れないでください。

 <service android:name="yourpackage.FileDownloader" />

ノート:

このソリューションを使用すると、各ファイルのサービスをすぐに開始し、各サービスが新しい進行状況を報告するときに着信ブロードキャストをさりげなく処理できます。次のファイルを開始する前に、各ファイルがダウンロードされるのを待つ必要はありません。ただし、ファイルを連続してダウンロードすることを主張する場合は、もちろん、100% 進行状況のコールバックを待ってから次のコールバックを呼び出すことができます。

「CallbackString」の使用

アクティビティで次のように使用できます。

private BroadcastReceiver receiver;

@Overrride
public void onCreate(Bundle savedInstanceState){

  // your oncreate code

  // starting the download service

  Intent i = new Intent(context, FileDownloader.class);
  i.putExtra("Path", folderpath);
  i.putExtra("Filename", filename);
  i.putExtra("CallbackString",
            "progress_callback");
  startService(i);

  // register a receiver for callbacks 
  IntentFilter filter = new IntentFilter("progress_callback");

  receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      //do something based on the intent's action
      Bundle b = intent.getExtras();
      String filepath = b.getString("Filepath");
      int progress = b.getInt("Progress");
      // could be used to update a progress bar or show info somewhere in the Activity
    }
  }
  registerReceiver(receiver, filter);
}

メソッドでこれを実行することを忘れないでくださいonDestroy

@Override
protected void onDestroy() {
  super.onDestroy();
  unregisterReceiver(receiver);
}

「progress_callback」は、選択した他の文字列にすることができることに注意してください。

ブロードキャスト レシーバーをプログラムで登録するから借用したコード例

于 2013-10-10T09:43:32.660 に答える