Androidアプリ開発

アプリのWordPress連携
Download Manager

この記事は約14分で読めます。
記事内に広告が含まれています。
スポンサーリンク

この記事は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を習得するのに最適です。まずは無料オンライン相談から♪

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

スポンサーリンク
シェアする
msakiをフォローする
スポンサーリンク

コメント欄

タイトルとURLをコピーしました