`
univasity
  • 浏览: 808855 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[Android API学习]Data Storage胡乱翻译(2)

阅读更多

使用外部存储器 (Using the External Storage)

每 个兼容Android的设备都支持一个共享的"外部存储器",你可以用它来储存文件。这可以是可被移除的存储媒介(例如一个SD卡)或是一个内部存储器 (不可被移除)。储存在外部存储器中的文件都是world-readable属性并且可以被用户修改(当他们允许USB大储存器在电脑上转移文件时)。

 

警告   :里面的这些外部文件是会消失不可见的——如果用户把外部存储器挂在到一台电脑上或移除该媒介(SD卡),同时你储存在外部储存器上的文件没有强制的安全保证。所有应用程式都可以读写这些文件并且用户也可以删除它们。

检测媒介是否可用 (Checking media availability)

在你对外部存储器进行任何操作之前,你应该始终调用getExternalStorageState() 函数来检测媒介是否处于可用状态。媒介可能被挂载到一台电脑上、遗失、只读或处于其他状态。例如,你可以像这里这样来检测其是否可用:

boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {    
	// We can read and write the media    
	mExternalStorageAvailable = mExternalStorageWriteable = true;
} else 
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) 
{    
	// We can only read the media    
	mExternalStorageAvailable = true;    
	mExternalStorageWriteable = false;
} else {    
	// Something else is wrong. It may be one of many other states, but all we need    
	//  to know is we can neither read nor write    
	mExternalStorageAvailable = mExternalStorageWriteable = false;
} 

这个例子检测外部存储器是否可用于读和写。你可能希望检测getExternalStorageState() 函数返回的其他状态,例如媒介是否被共享了(连接到了电脑)、是否完全遗失了、被意外移除了等等。当你的应用需要访问媒介的时候,你可以使用这些(携带更多的信息)来提示用户。

访问外部存储器上的文件 (Accessing files on external storage)

如果你使用的是API Level 8或更高版本,使用getExternalFilesDir() 函数来打开一个代表外部存储器目录(你最终储存文件的地方)的File 对象。该函数使用一个type 参数来指定你希望的子目录的类型,例如  DIRECTORY_MUSIC DIRECTORY_RINGTONES (传null 值,会返回你应用文件目录的根目录)。该函数会在需要时创建合适的目录。

 

如果你使用的是API Level 7或更低的版本,使用getExternalStorageDirectory() 函数来打开一个代表外部存储器根目录的File 对象。然后,你应该将你的数据写入到以下的目录:

/Android/data/<package_name> /files/

<package_name> 是你的Java风格的包名,比如"com.example.android.app "。如果用户的设备正在运行的是API Level 8或更高的版本,那么在你的应用被卸载后,该目录及其中的所有内容都将被删除掉。

从Media Scanner中隐藏你的文件

包含一个命名为  .nomedia   的空文件到你的外部文件目录(注意文件名中的点前缀)。这样会防止Android的media scanner通过读取你的媒介文件并包含他们到应用中,想画廊或音乐。


保存可被共享的文件 (Saving files that should be shared)

如果你希望保存的文件并不特定于你的应用并且不会在应用卸载时被删除,请将他们保存到外部存储器上的一个公有目录。这些目录放置在外部存储器的根目录下,比如  Music/ ,  Pictures/ ,  Ringtones/   及其他。

 

在API Level 8或更高版本中,使用  getExternalStoragePublicDirectory() 函数,传给它一个你希望的公有目录类型,比如  DIRECTORY_MUSIC ,  DIRECTORY_PICTURES , DIRECTORY_RINGTONES 或其他。该函数将在必要的时候创建合适的目录。

 

如果你使用的是API Level 7或更低的版本,使用getExternalStorageDirectory() 函数来打开一个代表外部存储器根目录的File 对象。然后,储存你的共享文件到以下目录中的一个里面:

  • Music/   - Media scanner classifies all media found here as user music.
  • Podcasts/   - Media scanner classifies all media found here as a podcast.
  • Ringtones/   - Media scanner classifies all media found here as a ringtone.
  • Alarms/   - Media scanner classifies all media found here as an alarm sound.
  • Notifications/   - Media scanner classifies all media found here as a notification sound.
  • Pictures/   - All photos (excluding those taken with the camera).
  • Movies/   - All movies (excluding those taken with the camcorder).
  • Download/   - Miscellaneous downloads.

保存缓存文件 (Saving cache files)

如果你使用的是API Level 8或更高的版本,使用getExternalCacheDir() 函数来打开一个代表外部存储器中你将储存缓存文件的目录的File 对象。如果用户卸载你的应用,这些文件将会被自动删除。无论如何,在你应用的生命中,你应该管理这些缓存文件并在不再需要的时候移除它们以便保存文件空间。

 

如果你使用的是API Level 7或更低的版本,使用getExternalStorageDirectory() 函数来打开一个代表外部存储器根目录的File 对象,然后将你的缓存数据写入到下面的目录:

/Android/data/<package_name> /cache/

<package_name> 是你的Java风格的包名,比如"com.example.android.app "。

使用数据库 (Using Databases)

Android提供了对SQLite 数据库的完整支持。任何你所创建的数据库在应用中的任何一个类中都可以通过其文件名来访问到,但无法在应用外部访问。

 

创建一个新的SQLite数据库,推荐的方式是创建一个SQLiteOpenHelper 的子类并重写其onCreate() 函数,在该函数中执行SQLite命令来在数据库中创建表。例如:

public class DictionaryOpenHelper extends SQLiteOpenHelper {    
	private static final int DATABASE_VERSION = 2;    
	private static final String DICTIONARY_TABLE_NAME = "dictionary";    
	private static final String DICTIONARY_TABLE_CREATE =                
		"CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" +                
		KEY_WORD + " TEXT, " +                
		KEY_DEFINITION + " TEXT);";    
	DictionaryOpenHelper(Context context) {        
		super(context, DATABASE_NAME, null, DATABASE_VERSION);    
	}    
	@Override    
	public void onCreate(SQLiteDatabase db) {        
		db.execSQL(DICTIONARY_TABLE_CREATE);    
	}
} 

然后你可以使用你已定义的构造函数来获得一个你实现的SQLiteOpenHelper 实例。调用  getWritableDatabase() 函数和getReadableDatabase() 函数分别来写进或读出数据,两个函数都会返回一个表示数据库的SQLiteDatabase 对象,并为SQLite的操作提供了函数。

Android没有在标准的SQLite概念上添加任何限制。我们推荐包含一个自动增量数值键字段来被用于作为一个唯一的ID,以便快速找到一个记录。这不需要是一个私有数据,但如果你实现了一个 content provider ,你就必须使用BaseColumns._ID   常量来包含一个唯一的ID。

 

你可以使用SQLiteDatabase query() 函数来执行SQLite的查询,query() 函数支持各种查询参数,例如查询表时就有projection, selection, columns, grouping等参数可配置。对于复杂的查询,例如那些需要列别名的,你应该使用SQLiteQueryBuilder ,它提供了多个便捷的函数可用于构建查询。

 

每个SQLite查询都会返回一个Cursor 对象,它指向查询所找到的所有的行。Cursor 永远是你操纵数据库查询结果及读取行和列的途径。

 

作为Android中展示了如何使用SQLite数据库的例子,请查看Note PadSearchable Dictionary 应用。

数据库调试 (Database debugging)

Android SDK包含了一个数据库工具来允许你浏览表格的内容,在SQLite数据库上运行SQL命令,并执行其他有用的方法。查阅Examining sqlite3 databases from a remote shell 学习如何运行该工具。

使用网络连接 (Using a Network Connection)

你可以在你自己的基于网络的服务器上使用网络(当它可用的时候)来储存和接收数据。要执行网络操作,使用下面的包中的类:java.net.* android.net.*

分享到:
评论

相关推荐

    data-storage-and-access.rar_android_android data storage

    但需要注意,自Android 6.0(API级别23)开始,需要动态请求WRITE_EXTERNAL_STORAGE权限。 SQLite数据库是Android提供的轻量级关系型数据库,适用于结构化的数据存储。通过`SQLiteOpenHelper`类创建和管理数据库,...

    Data Storage Networking

    总之,《Data Storage Networking》是一本全面且深入的教材,它不仅覆盖了CompTIA Storage+考试的核心知识点,还扩展到了当前IT领域的前沿话题,为读者提供了在数据存储领域持续学习和发展的坚实基础。

    android-Data-storage-and-access.rar_InternalFileDemo_android_and

    这个"android-Data-storage-and-access.rar_InternalFileDemo_android_and"压缩包包含了一系列的示例代码,涵盖了多种Android数据存储方式,帮助开发者理解并掌握如何在Android设备上有效地管理数据。 1. **...

    Android 请求 WebAPI的案例

    在Android开发中,与WebAPI进行交互是常见的需求,例如获取服务器数据、发送用户信息等。本案例"Android请求WebAPI"将详细讲解如何在Android应用中实现...通过学习和实践,你可以更好地掌握Android与WebAPI的交互技术。

    _storage_emulated_0_android_data_com.tencent.mobileqq_Tencent_QQfile_recv_实训四.zip

    标题中的"_storage_emulated_0_android_data_com.tencent.mobileqq_Tencent_QQfile_recv_实训四.zip" 是一个Android设备上的文件路径,它包含了用户在腾讯QQ应用中接收的文件。这个路径提供了关于文件存储位置和来源...

    android-serialport-api

    android-serialport-api Accessing serial ports for Android The current Android SDK does not provide any API for reading and writing to the Linux TTY serial ports. You may find such serial ports on ...

    Android Wear DataLayer

    在Android Wear DataLayer中,数据的传输主要依赖于两个关键组件:`DataItem`和`MessageAPI`。`DataItem`用于存储结构化数据,而`MessageAPI`则用于发送轻量级的消息。下面将详细介绍这两个组件以及如何使用它们。 ...

    Android6.0 Api Demos

    这些示例旨在帮助开发者更好地理解和学习如何在实际应用中使用Android的新特性和API。下面将详细探讨其中的一些关键知识点。 1. **权限管理(Runtime Permissions)** 在Android 6.0中,权限管理有了重大变化,...

    用系统自带的文件应用拷贝或移动文件无法到storage/emulated/0/Android/data 目录

    用系统自带的文件应用拷贝或移动文件无法到storage/emulated/0/Android/data 目录

    Android中文API帮助文档

    2. **Android_API**: 这可能包含了Android的API参考文档,详细列出了每个类、接口、方法和常量的用法,是开发者查询特定API功能的关键资源。开发者可以通过查阅这些文档,了解如何调用系统服务,实现特定功能。 3. ...

    android api.rar

    Android API是Android操作系统的核心组成部分,它...通过阅读"android api.rar"中的文档,开发者可以学习如何使用这些API来开发功能丰富的Android应用,同时了解最佳实践和注意事项,确保应用能在不同设备上顺畅运行。

    Android API手册 语法大全

    这份"Android API手册 语法大全"是开发者们不可或缺的参考资料,它详细介绍了Android操作系统中的各种API,涵盖了从基础到高级的各种功能,帮助开发者们理解并有效地利用这些API进行应用程序的开发。 Android API...

    Spring Data MongoDB API(Spring Data MongoDB 开发文档).CHM

    Spring Data MongoDB API。 Spring Data MongoDB 开发文档。

    Core.Data.in.Swift.Data.Storage.and.Management.for.iOS.and.OSX

    Explore how to get Core Data integrated into your application properly, and work with this flexible API to create convenience methods to improve your application's maintainability. Reduce your ...

    data-storage(4).rar_android_android 保存

    两个方法 1. openFileOutput (String name, int mode) name:文件的名称,不能包含分隔符"/",如果...创建的文件保存在/data/data/&lt;package_name&gt;/files目录下。 mode:操作模式 2. openFileInput (String name)

    数据库 data storage manager和buffer manager实现

    为了了解数据库buffer管理器的工作原理,对数据库底层结构有进一步的了解,编写一个data storage manager和buffer manager。该试验涉及储存和缓冲管理器。缓冲技术,散列技术,文件储存结构,磁盘空间和缓冲模块的...

    Android NFC API Reference(官方,中文)

    Android 框架 API 支持 NDEF(NFC Data Exchange Format)标准,用于在 NFC 标签和 Android 设备之间共享数据。 AndroidBeam™ 功能允许设备把一个 NDEF 消息推送到物理/硬件上相互监听的另一个设备上,这提供了比...

Global site tag (gtag.js) - Google Analytics