2016-10-18 3 views
1

私はAndroidアプリの開発では大胆な初心者です。しかし、私の現在のプロジェクトでは、野外観察を記録する(研究科学者である)アプリケーションを作成してSQLiteデータベースに保存する必要があります。これらは処理のために中央の場所に送られます。アプリはタブレットで使用されます。Androidタブレットの内部メモリ(API 23)にSQLiteデータベースを保存

現在、私はAndroidスタジオを使用しています。アプリ関数をエミュレートすると、すべてが計画どおりに動作し、DB Browser for SQLiteを使用すると、値がデータベースに正しく記録されていることがわかります。もちろん

/data/data/<your.app.package>/databases/foo.db

、これは、Androidでアクセス可能です:研究を行う

(例は答えhereです)、私はデータベース(.db)ファイルがディレクトリパスに保存されていることを認識していますスタジオですが、私の理解では、デバイスがルートされていない限り、実際のデバイスではこれらのファイルにアクセスできません。いろいろな理由から、これは私が関わっている仕事の選択肢ではありません。

調査では、質問Backup/restore sqlite db in android [duplicate]と重複するターゲットAndroid backup/restore: how to backup an internal database?の回答のように、データベースをバックアップしてバックアップデータベースをSDカードに保存する方法を見つけました。

23以上のAPIでSDカードなどの外部記憶装置に保存するには、外部ソースに書き込むために(Manifestで常に必要とされていた以上の)権限が必要です。多くの理由から、このオプションは最適ではありません。

this answerでは、バックアップはSDカードに保存されます。

final String inFileName = "/data/data/<your.app.package>/databases/foo.db"; 
File dbFile = new File(inFileName); 
FileInputStream fis = new FileInputStream(dbFile); 

String outFileName = Environment.getExternalStorageDirectory()+"/database_copy.db"; 

// Open the empty db as the output stream 
OutputStream output = new FileOutputStream(outFileName); 

// Transfer bytes from the inputfile to the outputfile 
byte[] buffer = new byte[1024]; 
int length; 
while ((length = fis.read(buffer))>0){ 
    output.write(buffer, 0, length); 
} 

// Close the streams 
output.flush(); 
output.close(); 
fis.close(); 

しかし、私の質問(おそらく脳おならタイプ)である - はそれが可能バックアップが内部ファイルに保存していることです(例:Documentsフォルダ)、権限はまだ必要ですか?

+0

デバイスの内部ファイルとはどういう意味ですか? –

+0

@HRavalは、デバイス自体のアクセス可能な領域に保存されています(したがって、私の例では、 'documents'フォルダ、または同等のものです)。 –

+0

「公共環境」には保管できません。ただし、内部のアプリケーションフォルダ(このユーザーはアクセスできない)にバックアップすることができます。 "これらは処理のために中央の場所に送信されます"あなたは手動で意味しますか? – crgarridos

答えて

1

ペジェションの流れを達成するのは複雑ではありません。私が助けを求めて作成したHere is a class。あなたは、このことから、あなたのMainActivityを拡張する必要があり、その後、あなたは呼び出すことができます。

verifyStoragePermissions(new Runnable() { 
    @Override 
    public void run() { 
     //backup your db here... 
    } 
}); 

それは、Androidサポートライブラリを使用して、すべてのAndroidのバージョンで動作します。

+0

これは、私がしたかったことを正確に行いました - ありがとう! –

関連する問題