111 lines
4.3 KiB
Plaintext
111 lines
4.3 KiB
Plaintext
page.title=Retrieving File Information
|
|
|
|
trainingnavtop=true
|
|
@jd:body
|
|
|
|
|
|
<div id="tb-wrapper">
|
|
<div id="tb">
|
|
|
|
<!-- table of contents -->
|
|
<h2>This lesson teaches you to</h2>
|
|
<ol>
|
|
<li><a href="#RetrieveMimeType">Retrieve a File's MIME Type</a></li>
|
|
<li><a href="#RetrieveFileInfo">Retrieve a File's Name and Size</a></li>
|
|
</ol>
|
|
|
|
<!-- other docs (NOT javadocs) -->
|
|
<h2>You should also read</h2>
|
|
<ul>
|
|
<li><a href="{@docRoot}guide/topics/providers/content-provider-basics.html#SimpleQuery"
|
|
>Retrieving Data from the Provider</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<p>
|
|
Before a client app tries to work with a file for which it has a content URI, the app can
|
|
request information about the file from the server app, including the file's data type and
|
|
file size. The data type helps the client app to determine if it can handle the file, and the
|
|
file size helps the client app set up buffering and caching for the file.
|
|
</p>
|
|
<p>
|
|
This lesson demonstrates how to query the server app's
|
|
{@link android.support.v4.content.FileProvider} to retrieve a file's MIME type and size.
|
|
</p>
|
|
<h2 id="RetrieveMimeType">Retrieve a File's MIME Type</h2>
|
|
<p>
|
|
A file's data type indicates to the client app how it should handle the file's contents. To get
|
|
the data type of a shared file given its content URI, the client app calls
|
|
{@link android.content.ContentResolver#getType ContentResolver.getType()}. This method returns
|
|
the file's MIME type. By default, a
|
|
{@link android.support.v4.content.FileProvider} determines the file's MIME type from its
|
|
filename extension.
|
|
</p>
|
|
<p>
|
|
The following code snippet demonstrates how a client app retrieves the MIME type of a file once
|
|
the server app has returned the content URI to the client:
|
|
</p>
|
|
<pre>
|
|
...
|
|
/*
|
|
* Get the file's content URI from the incoming Intent, then
|
|
* get the file's MIME type
|
|
*/
|
|
Uri returnUri = returnIntent.getData();
|
|
String mimeType = getContentResolver().getType(returnUri);
|
|
...
|
|
</pre>
|
|
<h2 id="RetrieveFileInfo">Retrieve a File's Name and Size</h2>
|
|
<p>
|
|
The {@link android.support.v4.content.FileProvider} class has a default implementation of the
|
|
{@link android.support.v4.content.FileProvider#query query()} method that returns the
|
|
name and size of the file associated with a content URI in a
|
|
{@link android.database.Cursor}. The default implementation returns two columns:
|
|
</p>
|
|
<dl>
|
|
<dt>{@link android.provider.OpenableColumns#DISPLAY_NAME DISPLAY_NAME}</dt>
|
|
<dd>
|
|
The file's name, as a {@link java.lang.String}. This value is the same as the value returned
|
|
by {@link java.io.File#getName File.getName()}.
|
|
</dd>
|
|
<dt>{@link android.provider.OpenableColumns#SIZE SIZE}</dt>
|
|
<dd>
|
|
The size of the file in bytes, as a {@code long} This value is the same as the value
|
|
returned by {@link java.io.File#length File.length()}
|
|
</dd>
|
|
</dl>
|
|
<p>
|
|
The client app can get both the {@link android.provider.OpenableColumns#DISPLAY_NAME
|
|
DISPLAY_NAME} and {@link android.provider.OpenableColumns#SIZE SIZE} for a file by setting all
|
|
of the arguments of {@link android.support.v4.content.FileProvider#query query()} to
|
|
{@code null} except for the content URI. For example, this code snippet retrieves a file's
|
|
{@link android.provider.OpenableColumns#DISPLAY_NAME DISPLAY_NAME} and
|
|
{@link android.provider.OpenableColumns#SIZE SIZE} and displays each one in separate
|
|
{@link android.widget.TextView}:
|
|
</p>
|
|
<pre>
|
|
...
|
|
/*
|
|
* Get the file's content URI from the incoming Intent,
|
|
* then query the server app to get the file's display name
|
|
* and size.
|
|
*/
|
|
Uri returnUri = returnIntent.getData();
|
|
Cursor returnCursor =
|
|
getContentResolver().query(returnUri, null, null, null, null);
|
|
/*
|
|
* Get the column indexes of the data in the Cursor,
|
|
* move to the first row in the Cursor, get the data,
|
|
* and display it.
|
|
*/
|
|
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
|
|
int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
|
|
returnCursor.moveToFirst();
|
|
TextView nameView = (TextView) findViewById(R.id.filename_text);
|
|
TextView sizeView = (TextView) findViewById(R.id.filesize_text);
|
|
nameView.setText(returnCursor.getString(nameIndex));
|
|
sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex)));
|
|
...
|
|
</pre>
|