2017-01-04 3 views
1

私はこの問題を数か月にわたって解決することに苦労しています。Googleは誰もができるだけ難しくしています5分ごとにすべてのことがどのように機能し、オンラインの情報が散在していて、インコヒーレントで、自己矛盾しているのか。私はここにいる誰かがこれを理解して私を助けてくれることを願っています。Androidの複数のバージョンで大規模なアプリプライベートデータの外部ストレージに正しくアクセスする方法

私は、ユーザーがデバイス自体に格納されたかなり大きい(〜4GB)データソースに対してオフラインアドレスチェックを実行できるアプリを持っています。このデータは技術的にアプリプライベートであり、他のアプリからアクセスできないようにする必要があります(これは主な問題ではありません)。データのサイズが大きいため、私は一貫して内部プライベートストレージの使用を避け、Androidの外部ストレージ管理の混乱に直面しました。私はAndroid 4.4でシステムが変更されているので、パッケージ固有のディレクトリを除いて、アプリケーションがSDカードに書き込めないようになっています。しかし、Androidは私のためにこのディレクトリを作成するようには思えず、私のアプリケーションでもディレクトリを作成することはできません。私は私のラップトップに自分のSDカードをマウントし、手動でパッケージディレクトリを作成することを余儀なくされた!これは私がエンドユーザに期待できるものではないので、最初の質問はどのように/いつパッケージ固有のディレクトリをSDカード上に作成すべきかということです。

今、私はAndroid 5,6、および明らかに7についても変更されていることを知り、非常に混乱しています。公式ドキュメントでは、getExternalFilesDirs()を使用して外部記憶域の配列を取得する方法について説明しています。どのように使用するのですか?私のアプリもこれらの場所にアクセスできますか? Androidは、大規模なプライベートストレージを必要とするサードパーティ製アプリケーションのためにあまり準備されていないようです。

私は、アンドロイド5の時点で、ストレージアクセスフレームワークを使用してSDカードに書き込む必要があり、ユーザに許可を与えるディレクトリを選択させる必要があります。

これはすべて不必要に思われます。私のやりたいことは、私のアプリがスムーズに行えるようにすることです。ユーザーの入力がほとんどなくても(エンドユーザーは基本的な技術知識も必要としません) - 約4GBのプライベートデータをデバイスのどこかに読み書きし、ほとんどのデバイスで異なるメーカーがさまざまなストレージオプションを持ち、Androidがファイルシステムから私たちの開発者を孤立させようとする方法と組み合わせることは、この単純な作業を悪夢にしています!

私はこれについてどのように正確に進むべきですか?できるだけ少ないユーザー操作で、可能な限り多くのデバイスとAndroidバージョン(少なくとも4.4+以上)をサポートしたいと思います。私は何をしているのか素晴らしいと思うが、ユーザーがアプリケーションを使用する前にSDカードを正しく設定する必要があるストレージを採用していることを理解しています。このアプリが機能するために大量のストレージスペースを必要とすることを考えると、リムーバブルSDカードを搭載したデバイスのみをサポートしていると判断しました。

+0

という事実モバイルデバイスに4ギガバイトのデータを書きたい - AndroidはSDCard上でディレクトリ/ファイルを作成することをサポートしている。公式文書には、このトピックに関する多くの情報があります。 –

+0

メソッド名に「External」を含むすべてのストレージ関数は、外部ストレージまたはリムーバブルメディア用です。しかし、あなたは私的なデータについて話しています。データを非公開にするには 'getFilesDir()'を使います。本当に欲しいものを説明してください。 – greenapps

+0

'getExternalFilesDirs()外部記憶場所の配列を取得します。どのように使用するのですか? 'あなたのアプリはすべてを使うことができます。許可を求めることなく、最初の場所は外部メモリです。 2番目はSDカードです。 3番目のusb otg。 – greenapps

答えて

0

sqlite DBを最初に作成するときに、この概念を使用してパス文字列を取得/作成しています。私はMEDIA_MOUNTEDのテストは必要ないと確信していますが、それはエンドユーザーが何をするのか分かっています。以下のコードは打ち上げ活動にあります。

public void onAvail() { 

    String state = Environment.getExternalStorageState(); 

    if (state.equals(Environment.MEDIA_MOUNTED) && (!state.equals(Environment.MEDIA_MOUNTED_READ_ONLY))) { 

     File removable = ContextCompat.getExternalFilesDirs(this, null)[1]; 
     THE_PATH = String.valueOf(removable) + "/Documents/"; 
     System.out.println("ALL TRUE ==> " + THE_PATH); 

    } else {// if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { 
     THE_PATH = ""; 
     System.out.println("ALL FALSE ==> "+ THE_PATH); 
    } 

このコードはDBHelperクラス のpublic static final文字列DB_NAME = THE_PATH + "パスワード" です。

誰も私に返された文字列が奇数に見えるこの概念を使用した経験の私の不足のいくつかと見ていない原因 /ストレージ/ 0905-3E16 /アンドロイド/データ//ファイル/ドキュメント/脇

関連する問題