Externalstorage - Java: The File Containing The Source Code Shown Below Is Located in The Corresponding Directory in
Externalstorage - Java: The File Containing The Source Code Shown Below Is Located in The Corresponding Directory in
java
The file containing the source code shown below is located in the corresponding directory in
<sdk>/platforms/android-<version>/samples/...
/*
* Copyright (C) 2010 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.apis.content;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Demonstration of styled text resources.
*/
public class ExternalStorage extends
Activity {
ViewGroup mLayout;
Item mExternalStoragePublicPicture;
Item mExternalStoragePrivatePicture;
Item mExternalStoragePrivateFile;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.external_storage);
mLayout =
(ViewGroup)findViewById(R.id.layout);
mExternalStoragePublicPicture =
createStorageControls(
"Picture:
getExternalStoragePublicDirectory",
Environment.getExternalStoragePublicDirector
y(
Environment.DIRECTORY_PICTURES),
new View.OnClickListener() {
public void onClick(View
v) {
createExternalStoragePublicPicture();
updateExternalStorageState();
}
},
new View.OnClickListener() {
public void onClick(View
v) {
deleteExternalStoragePublicPicture();
updateExternalStorageState();
}
});
mLayout.addView(mExternalStoragePublicPictur
e.mRoot);
mExternalStoragePrivatePicture =
createStorageControls(
"Picture
getExternalFilesDir",
getExternalFilesDir(Environment.DIRECTORY_PI
CTURES),
new View.OnClickListener() {
public void onClick(View
v) {
createExternalStoragePrivatePicture();
updateExternalStorageState();
}
},
new View.OnClickListener() {
public void onClick(View
v) {
deleteExternalStoragePrivatePicture();
updateExternalStorageState();
}
});
mLayout.addView(mExternalStoragePrivatePictu
re.mRoot);
mExternalStoragePrivateFile =
createStorageControls(
"File getExternalFilesDir",
getExternalFilesDir(null),
new View.OnClickListener() {
public void onClick(View
v) {
createExternalStoragePrivateFile();
updateExternalStorageState();
}
},
new View.OnClickListener() {
public void onClick(View
v) {
deleteExternalStoragePrivateFile();
updateExternalStorageState();
}
});
mLayout.addView(mExternalStoragePrivateFile.
mRoot);
startWatchingExternalStorage();
}
@Override
protected void onDestroy() {
super.onDestroy();
stopWatchingExternalStorage();
}
void handleExternalStorageState(boolean
available, boolean writeable) {
boolean has =
hasExternalStoragePublicPicture();
mExternalStoragePublicPicture.mCreate.setEna
bled(writeable && !has);
mExternalStoragePublicPicture.mDelete.setEna
bled(writeable && has);
has =
hasExternalStoragePrivatePicture();
mExternalStoragePrivatePicture.mCreate.setEn
abled(writeable && !has);
mExternalStoragePrivatePicture.mDelete.setEn
abled(writeable && has);
has =
hasExternalStoragePrivateFile();
mExternalStoragePrivateFile.mCreate.setEnabl
ed(writeable && !has);
mExternalStoragePrivateFile.mDelete.setEnabl
ed(writeable && has);
}
BroadcastReceiver
mExternalStorageReceiver;
boolean mExternalStorageAvailable =
false;
boolean mExternalStorageWriteable =
false;
void updateExternalStorageState() {
String state =
Environment.getExternalStorageState();
if
(Environment.MEDIA_MOUNTED.equals(state)) {
mExternalStorageAvailable =
mExternalStorageWriteable = true;
} else if
(Environment.MEDIA_MOUNTED_READ_ONLY.equals(
state)) {
mExternalStorageAvailable =
true;
mExternalStorageWriteable =
false;
} else {
mExternalStorageAvailable =
mExternalStorageWriteable = false;
}
handleExternalStorageState(mExternalStorageA
vailable,
mExternalStorageWriteable);
}
void startWatchingExternalStorage() {
mExternalStorageReceiver = new
BroadcastReceiver() {
@Override
public void onReceive(Context
context, Intent intent) {
Log.i("test", "Storage: " +
intent.getData());
updateExternalStorageState();
}
};
IntentFilter filter = new
IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_MOUNTED
);
filter.addAction(Intent.ACTION_MEDIA_REMOVED
);
registerReceiver(mExternalStorageReceiver,
filter);
updateExternalStorageState();
}
void stopWatchingExternalStorage() {
unregisterReceiver(mExternalStorageReceiver)
;
}
void
createExternalStoragePublicPicture() {
// Create a path where we will place
our picture in the user's
// public pictures directory. Note
that you should be careful about
// what you place here, since the
user often manages these files. For
// pictures and other media owned by
the application, consider
// Context.getExternalMediaDir().
File path =
Environment.getExternalStoragePublicDirector
y(
Environment.DIRECTORY_PICTURES);
File file = new File(path,
"DemoPicture.jpg");
try {
// Make sure the Pictures
directory exists.
path.mkdirs();
void
deleteExternalStoragePublicPicture() {
// Create a path where we will place
our picture in the user's
// public pictures directory and
delete the file. If external
// storage is not currently mounted
this will fail.
File path =
Environment.getExternalStoragePublicDirector
y(
Environment.DIRECTORY_PICTURES);
File file = new File(path,
"DemoPicture.jpg");
file.delete();
}
boolean
hasExternalStoragePublicPicture() {
// Create a path where we will place
our picture in the user's
// public pictures directory and
check if the file exists. If
// external storage is not currently
mounted this will think the
// picture doesn't exist.
File path =
Environment.getExternalStoragePublicDirector
y(
Environment.DIRECTORY_PICTURES);
File file = new File(path,
"DemoPicture.jpg");
return file.exists();
}
void
createExternalStoragePrivatePicture() {
// Create a path where we will place
our picture in our own private
// pictures directory. Note that we
don't really need to place a
// picture in DIRECTORY_PICTURES,
since the media scanner will see
// all media in these directories;
this may be useful with other
// media types such as
DIRECTORY_MUSIC however to help it classify
// your media for display to the
user.
File path =
getExternalFilesDir(Environment.DIRECTORY_PI
CTURES);
File file = new File(path,
"DemoPicture.jpg");
try {
// Very simple code to copy a
picture from the application's
// resource into the external
file. Note that this code does
// no error checking, and
assumes the picture is small (does not
// try to copy it in chunks).
Note that if external storage is
// not currently mounted this
will silently fail.
InputStream is =
getResources().openRawResource(R.drawable.ba
lloons);
OutputStream os = new
FileOutputStream(file);
byte[] data = new
byte[is.available()];
is.read(data);
os.write(data);
is.close();
os.close();
void
deleteExternalStoragePrivatePicture() {
// Create a path where we will place
our picture in the user's
// public pictures directory and
delete the file. If external
// storage is not currently mounted
this will fail.
File path =
getExternalFilesDir(Environment.DIRECTORY_PI
CTURES);
if (path != null) {
File file = new File(path,
"DemoPicture.jpg");
file.delete();
}
}
boolean
hasExternalStoragePrivatePicture() {
// Create a path where we will place
our picture in the user's
// public pictures directory and
check if the file exists. If
// external storage is not currently
mounted this will think the
// picture doesn't exist.
File path =
getExternalFilesDir(Environment.DIRECTORY_PI
CTURES);
if (path != null) {
File file = new File(path,
"DemoPicture.jpg");
return file.exists();
}
return false;
}
void createExternalStoragePrivateFile()
{
// Create a path where we will
place our private file on external
// storage.
File file = new
File(getExternalFilesDir(null),
"DemoFile.jpg");
try {
// Very simple code to copy a
picture from the application's
// resource into the external
file. Note that this code does
// no error checking, and
assumes the picture is small (does not
// try to copy it in chunks).
Note that if external storage is
// not currently mounted this
will silently fail.
InputStream is =
getResources().openRawResource(R.drawable.ba
lloons);
OutputStream os = new
FileOutputStream(file);
byte[] data = new
byte[is.available()];
is.read(data);
os.write(data);
is.close();
os.close();
} catch (IOException e) {
// Unable to create file,
likely because external storage is
// not currently mounted.
Log.w("ExternalStorage", "Error
writing " + file, e);
}
}
void deleteExternalStoragePrivateFile()
{
// Get path for the file on
external storage. If external
// storage is not currently mounted
this will fail.
File file = new
File(getExternalFilesDir(null),
"DemoFile.jpg");
if (file != null) {
file.delete();
}
}
boolean hasExternalStoragePrivateFile()
{
// Get path for the file on
external storage. If external
// storage is not currently mounted
this will fail.
File file = new
File(getExternalFilesDir(null),
"DemoFile.jpg");
if (file != null) {
return file.exists();
}
return false;
}
Item createStorageControls(CharSequence
label, File path,
View.OnClickListener
createClick,
View.OnClickListener
deleteClick) {
LayoutInflater inflater =
(LayoutInflater)getSystemService(LAYOUT_INFL
ATER_SERVICE);
Item item = new Item();
item.mRoot =
inflater.inflate(R.layout.external_storage_i
tem, null);
TextView tv =
(TextView)item.mRoot.findViewById(R.id.label
);
tv.setText(label);
if (path != null) {
tv =
(TextView)item.mRoot.findViewById(R.id.path)
;
tv.setText(path.toString());
}
item.mCreate =
(Button)item.mRoot.findViewById(R.id.create)
;
item.mCreate.setOnClickListener(createClick)
;
item.mDelete =
(Button)item.mRoot.findViewById(R.id.delete)
;
item.mDelete.setOnClickListener(deleteClick)
;
return item;
}
}