private static final String AUTHORITY = "com.example.android.supportv4.my_files";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.file_provider_example);
}
public void onShareFileClick(View view) {
// Save a thumbnail to file
final File thumbsDir = new File(getFilesDir(), "thumbs");
thumbsDir.mkdirs();
final File file = new File(thumbsDir, "private.png");
android.util.Log.i("FileProviderExample", "onShareFileClick--->file:"+file);
saveThumbnail(view, file);
// Now share that private file using FileProvider
final Uri uri = FileProvider.getUriForFile(this, AUTHORITY, file);
final Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/png");
intent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(intent);
}
/**
* Save thumbnail of given {@link View} to {@link File}.
*/
private void saveThumbnail(View view, File file) {
final Bitmap bitmap = Bitmap.createBitmap(
view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
android.util.Log.i("FileProviderExample", "saveThumbnail--->width:"+view.getWidth());
android.util.Log.i("FileProviderExample", "saveThumbnail--->height:"+view.getHeight());
final Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
try {
final OutputStream os = new FileOutputStream(file);
android.util.Log.i("FileProviderExample", "saveThumbnail--->os:"+os);
try {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
} finally {
os.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
mainifest.xml
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.android.supportv4.my_files"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/my_paths" />
</provider>
/res/xml/my_paths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Offer access to files under Context.getFilesDir() + "thumbs/"
through alias "my_thumbs" -->
<files-path name="my_thumbs" path="thumbs/" />
<!-- Offer access to files under Environment.getExternalStorageDirectory()
through alias "my_external" -->
<external-path name="my_external" />
<!-- Offer access to files under Context.getCacheDir() -->
<cache-path name="my_cache" />
</paths>