Example code for FileProvider.

Shows simple usage of FileProvider to share a private thumbnail
across process boundaries.  Also serves as sample code for javadoc
on FileProvider.

Bug: 7005318
Change-Id: I0ca12977a3832c7c2ac1c254d411a547ffee0a51
This commit is contained in:
Jeff Sharkey
2013-03-07 21:21:13 -08:00
parent 919e1de34d
commit 01ae453b0e
6 changed files with 154 additions and 0 deletions

View File

@@ -279,5 +279,27 @@
<provider android:authorities="com.example.supportv4.content.sharingsupportprovider" <provider android:authorities="com.example.supportv4.content.sharingsupportprovider"
android:name=".content.SharingSupportProvider" /> android:name=".content.SharingSupportProvider" />
<!-- FileProvider Example -->
<activity android:name=".content.FileProviderExample"
android:label="@string/file_provider_example">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="com.example.android.supportv4.SUPPORT4_SAMPLE_CODE" />
</intent-filter>
</activity>
<!-- BEGIN_INCLUDE(file_provider_declaration) -->
<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>
<!-- END_INCLUDE(file_provider_declaration) -->
</application> </application>
</manifest> </manifest>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="@string/share_file"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onShareFileClick" />
</LinearLayout>

View File

@@ -134,4 +134,6 @@
<string name="sharing_support_title">ShareCompat Demo</string> <string name="sharing_support_title">ShareCompat Demo</string>
<string name="sharing_receiver_title">ShareCompat Receiver</string> <string name="sharing_receiver_title">ShareCompat Receiver</string>
<string name="file_provider_example">FileProvider example</string>
</resources> </resources>

View File

@@ -0,0 +1,14 @@
<!-- BEGIN_INCLUDE(file_provider_paths_declaration) -->
<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 "/proc" through alias "my_proc" -->
<root-path name="my_proc" path="proc/" />
</paths>
<!-- END_INCLUDE(file_provider_paths_declaration) -->

View File

@@ -0,0 +1,81 @@
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.supportv4.content;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.content.FileProvider;
import android.view.View;
import com.example.android.supportv4.R;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* Sample that shows how private files can be easily shared.
*/
public class FileProviderExample extends Activity {
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");
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);
final Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
try {
final OutputStream os = new FileOutputStream(file);
try {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
} finally {
os.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -85,6 +85,12 @@ See test_defs.xsd for more information.
coverage_target="framework" coverage_target="framework"
continuous="true" /> continuous="true" />
<test name="frameworks-support-v4"
build_path="frameworks/support/v4/tests"
package="android.support.v4.content.tests"
coverage_target="android-support-v4"
continuous="true" />
<test name="core" <test name="core"
build_path="frameworks/base/tests/CoreTests" build_path="frameworks/base/tests/CoreTests"
package="android.core" package="android.core"