1

次の手順を実行する必要があります。

  1. ユーザーがファイルを選択できるようにする (任意の種類のファイル)
  2. 後でファイルにアクセスするための永続的な参照を取得するか、内部ストレージにコピーします。

最初のものは本当に簡単です。Intent.ACTION_GET_CONTENT を使用してファイルを取得する際に問題はありません。ファイルの MimeType も取得できます。しかし、私はコピーすることはできません。

FileInputStreamを使用してコピーしようとしましたが、明らかに許可がありません。誰かが私を助けてくれることを本当に願っています。

権限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

インテントコール

    Intent intent   = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    if ( intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_FILE_GET);
    }

ファイルのコピーに失敗しました

 FileInputStream in = (FileInputStream) getContentResolver().openInputStream( data.getData());
 FileOutputStream out = new FileOutputStream( "copy.jpg ");
 FileChannel inChannel   = in.getChannel();
 FileChannel outChannel  = out.getChannel();
 inChannel.transferTo(0, inChannel.size(), outChannel);
 in.close();
 out.close();

エラー:android.system.ErrnoException: open failed: EROFS (Read-only file system)

4

1 に答える 1

3

/copy.jpg読み取り専用のルート ディレクトリに出力ストリーム ファイルを作成しようとしています。

などのEnvironmentメソッドのgetExternalStorageDirectory()1 つ、または などのContextメソッドの 1 つを使用getFilesDir()して、書き込みアクセス権を持つディレクトリへのパスを作成します。

例えば:

File outFile = new File(Environment.getExternalStorageDirectory(), "copy.jpg");
FileOutputStream out = new FileOutputStream(outFile);

このドキュメントでは、ファイルを内部ストレージまたは外部ストレージに保存するためのさまざまなオプションについて説明します。

于 2015-06-27T14:15:43.863 に答える