です。私のAndoroidアプリでは、ユーザが自分の好む送信方法(電子メール、Skype、Viberなど)を使用して、ブルートゥース、など) 次のように私はIntent.ACTION_SEND使用しています:FileProvider.getUriForFileとUri.fromFileとの違いはありますが、アクセス許可は
に成功期待と同じように、Gmailの、とBluetooth経由でファイルを送信しFile readF = new File(fullFileName);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, getResources().getString(R.string.some_subject));
intent.putExtra(Intent.EXTRA_TEXT, getResources().getString(R.string.some_message_body));
Uri uri = FileProvider.getUriForFile(this, "my.package.fileprovider", readF);
intent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(intent, getResources().getString(R.string.some_info_message));
を。ユーザーがViberの何も送信されません選択した場合
しかし、ユーザーがSkypeのを選択したとき、ファイルが送信されますが、その名前が
を変更しました。私はウリを構築する唯一の方法を変更した場合は
:
Uri uri = Uri.fromFile(new File("/some/publicly/available/file"));
次に、ファイルが正常にスカイプを介して両方送信され、Viberの、名前が保存されています。
したがって、FileProviderとIntentのパブリックファイルを直接使用する場合の違いは何ですか?
ありがとうございます!安全な側にIntent.FLAG_GRANT_READ_URI_PERMISSIONを追加しました。私はFileProviderが正しい方法であると理解しています。SkypeとViberは自分のファイルで何でもできることを理解していますが、気になるものは、ファイルを送信している間は、パーミッション。そして行動の違いは私が完全に理解していないことです。 – Jeni
@Jeni:「私はそれが彼らにとって透明であるべきだと思った」 - 理想的には、そうである。 'FileProvider'は' content' 'Uri'の"ファイル名 "部分としてファイル名を使用し、' ContentResolver'の 'openInputStream()'は 'file'と' content'の両方を扱うので、理想的にSkypeとViberは両方平等に「ウリ」の形態をとる。明らかに、彼らはしません。これらの企業に就職し、その中からコードを修正しようとする以外に、これについて本当にできることは何もありません。 – CommonsWare