この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)
アプリのデータダウンロード機能をDownload Managerで実装する
ポイント
アプリのダウンロード機能をWordPressのプラグイン(Download Manager)を使用して実装する方法を紹介します。
Download Manager
アプリのダウンロード機能
Download ManagerはWEBサイトからのファイルのダウンロード管理するプラグインです。
ファイルのダウンロードはダウンロードリンク(URL)が必要で、ダウンロードリンクをアプリで管理する必要があります。
ダウンロードリンクのリスト取得とファイルのダウンロードを2フェーズで行うことで、ダウンロードリンクの管理をアプリから分離します。

stockerがダウンロードリンクのリストで以外がダウンロードファイルです。
ダウンロードリンクのリスト
ダウンロードリンクのリストはダウンロードするファイルを指定するタイトル、ダウンロードリンクのURLをTAB区切りのテキストを作成します。
ダウンロードリンクのリストを展開するためのエンティティクラス(Download)を用意します。
public class Download {
public Integer process; // 処理区分
public String key; // KEY
public String title; // タイトル
public String url; // URL
public String author; // 作成者
public String memo; // メモ
public String site; // WEBサイト
public Download(Integer process,
String key,
String title,
String url,
String author,
String memo,
String site) {
this.process = process;
this.key = key;
this.title = title;
this.url = url;
this.author = author;
this.memo = memo;
this.site = site;
}
}ダウンロードリンクのリストファイルをエンティティクラス(Download)に展開します。
ArrayList<String> arrayList = readFileString(new File(context.getFilesDir(), file));
ArrayList<Download> downloads = new ArrayList<>();
for (String string : arrayList) {
String[] strings = string.split("\t");
if (strings.length > 6) downloads.add(new Download(Integer.parseInt(strings[0]), strings[1], strings[2], strings[3], strings[4], strings[5], strings[6]));
}
:
public ArrayList<String> readFileString(File file) {
ArrayList<String> stringList = new ArrayList<>();
try (FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
BufferedReader reader= new BufferedReader(inputStreamReader) ) {
String lineBuffer;
while( (lineBuffer = reader.readLine()) != null ) {
stringList.add(lineBuffer);
}
} catch (Exception e) {
Log.d(TAG, Objects.requireNonNull(e.getMessage()));
}
return stringList;
}
ファイルのダウンロード
WEBサイトにHTTPリクエストを発行してファイルをダウンロードします。
ファイルのダウンロード後、ダウンロードリンクのリストの場合はダウンロードするファイルの選択処理、以外はダウンロード後処理を記述します。
ファイルのダウンロード
private long download;
:
public void download(int process, String url, String file) {
OkHttpClient client = new OkHttpClient();
Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", new File(context.getFilesDir(), file));
download = 0;
toast = System.currentTimeMillis();
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(() -> {
Request request = new Request.Builder()
.url(url)
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
ResponseBody body = response.body();
try (InputStream inputStream = body.byteStream();
OutputStream outputStream = new FileOutputStream(Objects.requireNonNull(context.getContentResolver().openFileDescriptor(uri, "wt")).getFileDescriptor())) {
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
byte[] buffer = new byte[1024];
int len;
while ((len = Objects.requireNonNull(inputStream).read(buffer)) != -1) {
download += len;
bufferedOutputStream.write(buffer, 0, len);
}
bufferedOutputStream.close();
} catch (IOException e) {
// エラー処理を記述する
:
download = 0;
}
} else {
// エラー処理を記述する
:
}
} catch (IOException e) {
// エラー処理を記述する
:
}
if (download > 0) {
handler.post(() -> {
switch (process) {
case 0: // ダウンロードリスト
ArrayList<String> arrayList = readFileString(new File(context.getFilesDir(), file));
ArrayList<Download> downloads = new ArrayList<>();
for (String string : arrayList) {
String[] strings = string.split("\t");
if (strings.length > 6) downloads.add(new Download(Integer.parseInt(strings[0]), strings[1], strings[2], strings[3], strings[4], strings[5], strings[6]));
}
// ダウンロードするファイルの選択処理を記述する
:
break;
case 1: // 購入リスト
// ダウンロード後処理を記述する
:
break;
}
});
} else {
if (retry < RETRY) {
retry++;
handler.postDelayed(() -> download(process, url, file), 3000);
}
}
});
}
HttpリクエストのハンドリングはOkHttpを使用します。
ダウンロードリンクのリスト取得
download(0, "https://www.jisei-firm.com/download/stocker/?wpdmdl=15975", "stocker");urlにはダウンロードリンクのリストのパーマリンクにショートコードを付加して指定します。


ダウンロードファイルの取得
Download downloads = new Download(1, KEY, タイトル, URL, 作成者, メモ, WEBサイト);
:
download(download.process, download.url, "download")ダウンロードリンクのリストから取得したprocessとurlを指定します。
今回は、ここまでです。
アプリのデータダウンロード機能を実装しているAndroidアプリです。
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪
これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、JavaやC#などのオブジェクト指向言語が初めての方は、Androidのアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。
未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪




コメント欄