androidgetexternalfilesdir的简单介绍

本篇文章给大家谈谈androidgetexternalfilesdir,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

安卓从手机相册获取照片作为头像缓存地址

* 1、实现原理:用户打开相册或相机选择相片后,相片经过压缩并设置在控件上,图片在本地sd卡存一份(如果有的话,没大桐有则内部存储,所以还

* 需要判断用户是否挂载了sd卡),然后在服务器上存储一份该图片,当下次再次启桐则动应用时,会默认去sd卡加载该图片,如果本地没有,再会去联网请求

* 2、使用了picasso框架以及自定义BitmapUtils工具类

* 3、记得加上相关权局仿棚限

* uses-permission android:name="android.permission.INTERNET"/uses-permission

uses-permission android:name="android.permission.CAMERA"/

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/uses-permission

* */

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private ImageView iv;//要设置的头像

private Button btn_photo;//调用相册按钮

private Button btn_camera;//调用相机按钮

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

iv=(ImageView) findViewById(R.id.iv);

btn_photo = (Button) findViewById(R.id.btn_photo);

btn_camera = (Button) findViewById(R.id.btn_camera);

btn_photo.setOnClickListener(this);

btn_camera.setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_photo://打开系统相册

Intent intent=new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(intent,100);

break;

case R.id.btn_camera://打开系统相机

Intent intent2=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(intent2,200);

break;

}

}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(requestCode==100resultCode==RESULT_OKdata!=null){//系统相册

Uri imageData = data.getData();

String path=getPath(imageData);

Bitmap bitmap = BitmapFactory.decodeFile(path);

Bitmap bitmap1 = BitmapUtils.zoom(bitmap, iv.getWidth(), iv.getHeight());

Bitmap bitmap2 = BitmapUtils.circleBitmap(bitmap1);

//加载显示

iv.setImageBitmap(bitmap2);

//bitmap图片上传到服务器......

//bitmap图片保存到本地

saveImage(bitmap2);

}else if(requestCode==200resultCode==RESULT_OKdata!=null){//系统相机

Bitmap bitmap = (Bitmap) data.getExtras().get("data");

BitmapUtils.zoom(bitmap,iv.getWidth(),iv.getHeight());

bitmap=BitmapUtils.circleBitmap(bitmap);

//加载显示

iv.setImageBitmap(bitmap);

//bitmap图片上传到服务器......

//bitmap图片保存到本地

saveImage(bitmap);

}

}

/**

* 数据的存储。(5种)

* Bimap:内存层面的图片对象。

*

* 存储---内存:

* BitmapFactory.decodeFile(String filePath);

* BitmapFactory.decodeStream(InputStream is);

* 内存---存储:

* bitmap.compress(Bitmap.CompressFormat.PNG,100,OutputStream os);

*/

private void saveImage(Bitmap bitmap) {

File filesDir;

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断sd卡是否挂载

//路径1:storage/sdcard/Android/data/包名/files

filesDir = this.getExternalFilesDir("");

}else{//手机内部存储

//路径:data/data/包名/files

filesDir = this.getFilesDir();

}

FileOutputStream fos = null;

try {

File file = new File(filesDir,"icon.png");

fos = new FileOutputStream(file);

bitmap.compress(Bitmap.CompressFormat.PNG, 100,fos);

} catch (FileNotFoundException e) {

e.printStackTrace();

}finally{

if(fos != null){

try {

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

//如果本地有,就不需要再去联网去请求

private boolean readImage() {

File filesDir;

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断sd卡是否挂载

//路径1:storage/sdcard/Android/data/包名/files

filesDir = getExternalFilesDir("");

}else{//手机内部存储

//路径:data/data/包名/files

filesDir = getFilesDir();

}

File file = new File(filesDir,"icon.png");

if(file.exists()){

//存储---内存

Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());

iv.setImageBitmap(bitmap);

return true;

}

return false;

}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)

private String getPath(Uri uri) {

int sdkVersion = Build.VERSION.SDK_INT;

//高于4.4.2的版本

if (sdkVersion = 19) {

Log.e("TAG", "uri auth: " + uri.getAuthority());

if (isExternalStorageDocument(uri)) {

String docId = DocumentsContract.getDocumentId(uri);

String[] split = docId.split(":");

String type = split[0];

if ("primary".equalsIgnoreCase(type)) {

return Environment.getExternalStorageDirectory() + "/" + split[1];

}

} else if (isDownloadsDocument(uri)) {

final String id = DocumentsContract.getDocumentId(uri);

final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),

Long.valueOf(id));

return getDataColumn(this, contentUri, null, null);

} else if (isMediaDocument(uri)) {

final String docId = DocumentsContract.getDocumentId(uri);

final String[] split = docId.split(":");

final String type = split[0];

Uri contentUri = null;

if ("image".equals(type)) {

contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

} else if ("video".equals(type)) {

contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

} else if ("audio".equals(type)) {

contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

}

final String selection = "_id=?";

final String[] selectionArgs = new String[]{split[1]};

return getDataColumn(this, contentUri, selection, selectionArgs);

} else if (isMedia(uri)) {

String[] proj = {MediaStore.Images.Media.DATA};

Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null);

int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

actualimagecursor.moveToFirst();

return actualimagecursor.getString(actual_image_column_index);

}

} else if ("content".equalsIgnoreCase(uri.getScheme())) {

// Return the remote address

if (isGooglePhotosUri(uri))

return uri.getLastPathSegment();

return getDataColumn(this, uri, null, null);

}

// File

else if ("file".equalsIgnoreCase(uri.getScheme())) {

return uri.getPath();

}

return null;

}

/**

* uri路径查询字段

*

* @param context

* @param uri

* @param selection

* @param selectionArgs

* @return

*/

public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {

Cursor cursor = null;

final String column = "_data";

final String[] projection = {column};

try {

cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);

if (cursor != null cursor.moveToFirst()) {

final int index = cursor.getColumnIndexOrThrow(column);

return cursor.getString(index);

}

} finally {

if (cursor != null)

cursor.close();

}

return null;

}

private boolean isExternalStorageDocument(Uri uri) {

return "com.android.externalstorage.documents".equals(uri.getAuthority());

}

public static boolean isDownloadsDocument(Uri uri) {

return "com.android.providers.downloads.documents".equals(uri.getAuthority());

}

public static boolean isMediaDocument(Uri uri) {

return "com.android.providers.media.documents".equals(uri.getAuthority());

}

public static boolean isMedia(Uri uri) {

return "media".equals(uri.getAuthority());

}

/**

* @param uri The Uri to check.

* @return Whether the Uri authority is Google Photos.

*/

public static boolean isGooglePhotosUri(Uri uri) {

return "com.google.android.apps.photos.content".equals(uri.getAuthority());

}

/**

* 判断本地是否有该图片,没有则去联网请求

* */

@Override

protected void onResume() {

super.onResume();

if(readImage()){

return;

}

}

}

//BitmapUtils工具类public class BitmapUtils { /**

* 该方法用于将图片进行圆形处理

* */ public static Bitmap circleBitmap(Bitmap source){ //默认只对宽进行处理 int width=source.getWidth(); Bitmap bitmap=Bitmap.createBitmap(width,width,Bitmap.Config.ARGB_8888); Canvas canvas=new Canvas(bitmap); Paint paint=new Paint(); //设置抗锯齿 paint.setAntiAlias(true); canvas.drawCircle(width/2,width/2,width/2,paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(source,0,0,paint); return bitmap; } /** * 该方法用于图片压缩处理,注意width、height参数的类型必须是float * */ public static Bitmap zoom(Bitmap source,float width,float height){ Matrix matrix=new Matrix(); //图片进行压缩处理 matrix.postScale(width/source.getWidth(),height/source.getHeight()); Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, false); return bitmap; }}

以上所述是小编给大家介绍的Android实现调用系统图库与相机设置头像并保存在本地及服务器 ,希望对大家有所帮助

[img]

Android 请问如何更改android 数据库的存储路径

These files will be ones that get deleted first when the device runs low on storage. There is no guarantee when these files will be deleted.

但是,最好不要依赖系统改握来管理,应该自己设定一个最大容量,当超出这个值时自己删除。

Context.getFilesDir(),Context.openFileOutput(String, int),Context.getFileStreamPath(String),Context.getDir(String, int)

/data/data/files

Android支持携吵在SD卡上的应用私有目录,在Froyo版本后,通过getExternalFilesDir()可以获得具体路径。该路径依赖与应用的包名,如果你包为hello.file那么SD开上的应用私有目录为\mnt\sdcard\Android\data\hello.file\files\.

在使用SD卡目录时,需注意SD卡是否核隐庆挂载,可通过Environment.getExternalStorageState()方法进行判断,如果返回值为Envirnment.MEDIA_MOUNTED表示SD卡处于挂载状态,可以放心使用。

getExternalCacheDir()和getCacheDir()比较

共同点:

files will be deleted when the application is uninstalled

不同点:

1、The platform does not monitor the space available in external storage, and thus will not automatically delete these files. Note that you should be managing the maximum space you will use for these anyway, just like with getCacheDir().

2、External files are not always available: they will disappear if the user mounts the external storage on a computer or removes it. See the APIs on Environment for information in the storage state.

3、There is no security enforced with these files. All applications can read and write files placed here.

android怎么获取应用的目录

一、方法介绍:

每个Android应用程序都可以通过Context来获取与应用程序相关的目录,这些目录的功能各异,每一个目录都有自己的特点,有时候可能会搞混淆,本文结合android源码注释和实际操作,详细介绍一下每个方法:

方法:getFilesDir

释义:返回通过Context.openFileOutput()创建和存储的文件系统的绝对路径,应用程序文件,这些文件会在程序被卸载的时候全部删掉。

方法:getCacheDir

释义:返回应用程序指定的缓存目录,这些文件在设备内存不足时会优先被删除掉,所以存放在这里的文件是没有任何保障的,可能会随时丢掉。

方法:getDir

释义:这是一个可以存放你自己应用程序自定义的文件,你可以通过该方法返回的File实例来创建或者访问这个目录,注意该目录下的文件只有你自己的程序可以访问。

方法:getExternalCacheDir

释义:使用这个方法需要写外部存储的权限“uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /”,调用该方法会返回应用程序的外部文件系统(Environment.getExternalStorageDirectory())目录的绝伏铅颂对路径,它是用来存放应激帆用的缓存文件,它和getCacheDir目录一样,目录下的文件都会在程序被卸载的时候被清除掉。

方法:getExternalFilesDir

释义:使用这个方法需要写外部存储的权限“uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /”,这个目录是与应用程序相关的外部文件系统,它和getExternalCacheDir不一样的是只要应用程序存在它就会一直存在,这些文件只属于你的应用,不能被其它人访问。同样,这个目录下的文件在程序被卸载时也会被一同删除。

方法:getExternalFilesDir

释义:和上面的方法一样,只是返回的是其目录下某一类型的文件,这些类型可以是: Environment#DIRECTORY_MUSIC 音乐 Environment#DIRECTORY_PODCASTS 音频 Environment#DIRECTORY_RINGTONES 铃声 Environment#DIRECTORY_ALARMS 闹铃 Environment#DIRECTORY_NOTIFICATIONS 通知铃声 Environment#DIRECTORY_PICTURES 图片 Environment#DIRECTORY_MOVIES 视频

方法:getDatabasePath

释义:保存通过Context.openOrCreateDatabase 创建的数据库文件

方法:getPackageCodePath

释义:返回android 安装包的完整路径,这个包是一个zip的压缩文件,它包括应用程序的代码和assets文件。

方法:getPackageResourcePath

释义:返回android 安装包的完整路径,这个包是一个ZIP的要锁文件,它包括应用程序的私有资源。

方法:getObbDir

释义:返回应用程序的OBB文件目录(如果有的话),注意如缺郑果该应用程序没有任何OBB文件,这个目录是不存在的。

二、测试程序:

测试代码如下:

private StringBuilder getFilePath( ){

StringBuilder filePathBuilder = new StringBuilder( );

// 返回通过Context.openFileOutput()创建和存储的文件系统的绝对路径,应用程序文件,这些文件会在程序被卸载的时候全部删掉。

filePathBuilder.append( "getFilesDir == " ).append( getFilesDir( ) ).append( "\n" );

// 返回应用程序指定的缓存目录,这些文件在设备内存不足时会优先被删除掉,所以存放在这里的文件是没有任何保障的,可能会随时丢掉。

filePathBuilder.append( "getCacheDir == " ).append( getCacheDir( ) ).append( "\n" );

// 这是一个可以存放你自己应用程序自定义的文件,你可以通过该方法返回的File实例来创建或者访问这个目录,注意该目录下的文件只有你自己的程序可以访问。

filePathBuilder.append( "getDir == " ).append( getDir("test.txt", Context.MODE_WORLD_WRITEABLE) ).append( "\n" );

/* 需要写文件权限 uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" / */

// 调用该方法会返回应用程序的外部文件系统(Environment.getExternalStorageDirectory())目录的绝对路径,它是用来存放应用的缓存文件,它和getCacheDir目录一样,目录下的文件都会在程序被卸载的时候被清除掉。

filePathBuilder.append( "getExternalCacheDir == " ).append( getExternalCacheDir( ) ).append( "\n" );

// 这个目录是与应用程序相关的外部文件系统,它和getExternalCacheDir不一样的是只要应用程序存在它就会一直存在,这些文件只属于你的应用,不能被其它人访问。同样,这个目录下的文件在程序被卸载时也会被一同删除。

filePathBuilder.append( "getExternalFilesDir == " ).append( getExternalFilesDir( "/" ) ).append( "\n" );

/**

* 和上面的方法一样,只是返回的是其目录下某一类型的文件,这些类型可以是:

* Environment#DIRECTORY_MUSIC 音乐

* Environment#DIRECTORY_PODCASTS 音频

* Environment#DIRECTORY_RINGTONES 铃声

* Environment#DIRECTORY_ALARMS 闹铃

* Environment#DIRECTORY_NOTIFICATIONS 通知铃声

* Environment#DIRECTORY_PICTURES 图片

* Environment#DIRECTORY_MOVIES 视频

*

* */

filePathBuilder.append( "getExternalFilesDir == " ).append( getExternalFilesDir( Environment.DIRECTORY_PICTURES ) ).append( "\n" );

// 保存通过Context.openOrCreateDatabase 创建的数据库文件

filePathBuilder.append( "getDatabasePath == " ).append( getDatabasePath( DATA_BASE_NAME ) ).append( "\n" );

// 返回android 安装包的完整路径,这个包是一个zip的压缩文件,它包括应用程序的代码和assets文件

filePathBuilder.append( "getPackageCodePath == " ).append( getPackageCodePath( ) ).append( "\n" );

// 返回android 安装包的完整路径,这个包是一个ZIP的要锁文件,它包括应用程序的私有资源。

filePathBuilder.append( "getPackageResourcePath == " ).append( getPackageResourcePath( ) ).append( "\n" );

// 返回应用程序的OBB文件目录(如果有的话),注意如果该应用程序没有任何OBB文件,这个目录是不存在的。

filePathBuilder.append( "getObbDir == " ).append( getObbDir( ) ).append( "\n" );

return filePathBuilder;

}

android中的各种目录

---getCacheDir():/基弯好data/data/包名/cache

---getCodeCacheDir:/data/data/包名/code_cache

---getExternalCacheDir:/storage/emulated/0/Android/data/包名/cache

---getDataDir:/data/data/包名

---getFilesDir:/data/data/包名/files

---getObbDir:/storage/emulated/0/Android/obb/包名

---getFilesDir:/data/data/包名/files

---getNoBackupFilesDir:/data/data/包名/no_backup

---getExternalCacheDir:/storage/emulated/0/Android/data/包名/cache

---getExternalFilesDir(Environment.DIRECTORY_MUSIC):/storage/emulated/0/Android/data/包名/files/Music

---getExternalFilesDir(Environment.DIRECTORY_PODCASTS):/storage/emulated/0/Android/data/包名/files/闹弯Podcasts

---getExternalFilesDir(Environment.DIRECTORY_RINGTONES):/storage/emulated/0/Android/data/搏铅包名/files/Ringtones

---getExternalFilesDir(Environment.DIRECTORY_ALARMS):/storage/emulated/0/Android/data/包名/files/Alarms

---getExternalFilesDir(Environment.DIRECTORY_NOTIFICATIONS):/storage/emulated/0/Android/data/包名/files/Notifications

---getExternalFilesDir(Environment.DIRECTORY_PICTURES):/storage/emulated/0/Android/data/包名/files/Pictures

---getExternalFilesDir(Environment.DIRECTORY_MOVIES):/storage/emulated/0/Android/data/包名/files/Movies

---getDir(picture):/data/data/包名/app_picture

android系统怎么设置内部存储的访问权限

Android支持外部存储(case-insensitive filesystem with immutable POSIX permission classes and modes)。

外部存储可以通过物理介质提供(如SD卡),也可以通过将内部存储中的一部分封装而成,设备可以有多个外部存储实例。

访问外部存储的权限

从Android 1.0开始,写操作受权限WRITE_EXTERNAL_STORAGE保护。

从Android 4.1开始,读操作受权限READ_EXTERNAL_STORAGE保护。

从Android 4.4开始,应用可以管理在它外部存储上的特定包名目录,而不用获取WRITE_EXTERNAL_STORAGE权限。

比如,一个包名为com.example.foo的应用,可以自由访问外存上的Android/data/com.example.foo/目录。

外部存储对数据提供的保护较少,所以系统不应该存储敏感数据在外部存储上。

特别地,配置和log文件应该存储在内部存储中,这样它们可以被有效地保护。

对于多用户的情况,一般每个用户都会有自己独立的外部存储,应用仅对当前用户的外部存储有访问权限。

Environment API的目录

getDataDirectory():用户数据目录。

getDownloadCacheDirectory():下载缓存内容目录。

getExternalStorageDirectory():主要的外部存储目录。

但是这个目录很可能当前不能访问,比如这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,你可以通过getExternalStorageState()来获取当前状态。

还有多用户或者多外部存储的情况,此文不再讨论。

为了不污染用户的根命名空间,一般不会直接使用这个外部存储的根目录。

任何应用私有的文件的应该被放置在 Context.getExternalFilesDir返回的目录下,在应用被卸载的时候,系统会橡谈清理的就是这个目录。

另一些共享文件应该被放置在 getExternalStoragePublicDirectory(String)返回的目录中。

写这个路径需要 WRITE_EXTERNAL_STORAGE权限,读需要 READ_EXTERNAL_STORAGE权限,当然写权限默认包含了读权限。

从KITKAT 即Android 4.4开始,如果你的应用只是需要存储一些内部数据,可以考虑使用 :

getExternalFilesDir(String)或者getExternalCacheDir(),它们不需要获取权限。

getExternalStoragePublicDirectory(String type)这个方法接收一个参数,表明目录所放的文件的类型,传入的参数是Environment类中的DIRECTORY_XXX静态变量,比如DIRECTORY_DCIM等。

注意:传入的类型参数不能是null,返回的目录路径有可能不存在,所以必须在使用之前确认一下,比如使用File.mkdirs创建该路径。

getRootDirectory()得到Android的根目录。

isExternalStorageEmulated()设备的外存是否是用内存模拟的,是则返回true。(API Level 11)

isExternalStorageRemovable()设备的外存是否是可以拆卸的,比如SD卡,是则返回true。(API Level 9)

Context API中的目录

getExternalFilesDir(String type)是应用在外部存储上的目录。

和Environment类的getExternalStoragePublicDirectory(String type)方法类似,返回包含参数指定的特定类型文件的子目录。

getExternalCacheDir()是应用的在外部存储上的缓存目录。

从Android 4.4这两个方法不需要读写权限,梁咐碰是针对于本应用来说,如果要访问其他应用的相关目录,还是需要声明读写权限。

简闷Android 4.4之前的版本要访问的话还是要声明读写权限的,如果没有在manifest中写权限,上面两个get方法都会返回null。

与上面两个方法形成对比的是下面两个方法:

getFilesDir()

getCacheDir()

这两个方法得到的是内存上的目录。

这些目录都是属于应用的,当应用被卸载的时候,里面的内容都会被移除,但是不要依赖于系统的操作。

android 的getexternalfilesdir 是什么东西?作用?

Android的纳拦getExternalFilesDir()是Context里面的方法

通过getExternalFilesDir()方法可以获取到高茄慎 SDCard/Android/data/你的应用的包名/files/ 目录,一戚敬般放一些长时间保存的数据

关于androidgetexternalfilesdir和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表