- 浏览: 808855 次
- 性别:
- 来自: 广州
最新评论
-
mixture:
语句int num1, num2;的频度为1;语句i=0;的频 ...
算法时间复杂度的计算 [整理] -
zxjlwt:
学习了。http://surenpi.com
[问题解决]Error: ShouldNotReachHere() [整理] -
Animal:
谢谢 楼主 好东西
算法时间复杂度的计算 [整理] -
univasity:
gaidandan 写道缓存失败,,模拟器上可以缓存,同样代码 ...
[开发总结]WebView使用中遇到的一些问题&解决 -
blucelee2:
那么麻烦干吗,而且这种方法会导致,当拉太小的时候样式会丢掉,整 ...
[SWT]SashForm中固定单侧大小(&实现面板隐藏)
使用外部存储器 (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 永远是你操纵数据库查询结果及读取行和列的途径。
数据库调试 (Database debugging)
Android SDK包含了一个数据库工具来允许你浏览表格的内容,在SQLite数据库上运行SQL命令,并执行其他有用的方法。查阅Examining sqlite3 databases from a remote shell 学习如何运行该工具。
使用网络连接 (Using a Network Connection)
你可以在你自己的基于网络的服务器上使用网络(当它可用的时候)来储存和接收数据。要执行网络操作,使用下面的包中的类:
android.net.*
java.net.*
发表评论
-
[转]Android Studio的logcat窗口被拖出来后如何还原?
2016-01-07 10:08 3273无意把Memory Monitor的窗口拖出来了,然后发觉 ... -
[问题解决]个推SDK使用侧记 -- 多个账号注册导致的问题
2013-12-28 14:40 2242这是我们项目最近用到的东西,用来实现消息推送。 (还不了 ... -
[问题解决] 个推(igetui)SDK使用侧记 -- 多个账号注册同一应用导致的问题
2013-12-28 14:33 0这是我们项目最近用到的东西,用来实现消息推送。 (还不了解 ... -
[问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖?
2012-02-02 16:11 17076情况是这样的,使用NotificationManager触发多 ... -
迟来的试用:App Inventor,不用编码也能做出apk
2011-12-22 22:29 2836最近看到App Inventor即将关闭的消息(2011.12 ... -
Maven In Android
2011-08-31 17:32 3485Maven 一个项目管理工具,类似于Ant。相比Ant, ... -
[问题解决]WebView显示的网页在大分辨率屏下被放大 - 密度惹的祸
2011-08-31 17:16 9134例如适合800px宽度的页面,如果通过WebView在 ... -
[工作积累].9图片,不要忘了设定内容填充区域
2011-08-31 17:13 1797<? xml version ... -
Android调试工具 —— MAT [整理]
2011-06-26 23:06 30583简介: Eclipse提供的一个内存分析工具。它是一个功 ... -
Android调试工具 —— TraceView [整理]
2011-06-26 22:58 5152简介: 来自API文档中的一段介绍: Tracevi ... -
[开发总结]WebView使用中遇到的一些问题&解决
2011-06-15 13:45 13343<!-- 最近接触WebView比较多,总结一下使用过程 ... -
[Android API 学习]WebView基本使用
2011-06-15 10:54 8520WebView是android.webkit包下的一 ... -
[问题解决]Error: ShouldNotReachHere() [整理]
2011-06-01 13:03 10886在Android项目中创建一个 ... -
[小工具]apk反编译工具整合(修复)
2011-05-05 00:30 5345//----------------------------- ... -
[问题解决]java.lang.SecurityException: Permission Denial requires null[整理]
2011-04-12 13:10 24113原因分析: 在SDK版本eclair中(Level 5- ... -
[基础]Android SDK版本与API Level对应列表[收集]
2011-04-12 12:32 4803Platform Version AP ... -
Android apk安装后自动添加桌面图标 和 自启动的尝试
2011-04-02 01:47 15256前一个问题是论坛里的一位朋友提出来的:“如何在应用安装到手机里 ... -
View.setOnKeyListener无法捕获事件?[收集]
2011-03-24 23:32 12708最近在使用View中的setKeyListener时碰到了这问 ... -
Android 获取指向Resource的URI[转]
2011-03-23 21:35 7605>> Uri真强大,还能这么搞...收藏了,回头要 ... -
Android模拟器网络连接问题解决[转]
2011-03-22 13:35 7929原文链接: http://hi.baidu.com/bing ...
相关推荐
但需要注意,自Android 6.0(API级别23)开始,需要动态请求WRITE_EXTERNAL_STORAGE权限。 SQLite数据库是Android提供的轻量级关系型数据库,适用于结构化的数据存储。通过`SQLiteOpenHelper`类创建和管理数据库,...
总之,《Data Storage Networking》是一本全面且深入的教材,它不仅覆盖了CompTIA Storage+考试的核心知识点,还扩展到了当前IT领域的前沿话题,为读者提供了在数据存储领域持续学习和发展的坚实基础。
这个"android-Data-storage-and-access.rar_InternalFileDemo_android_and"压缩包包含了一系列的示例代码,涵盖了多种Android数据存储方式,帮助开发者理解并掌握如何在Android设备上有效地管理数据。 1. **...
在Android开发中,与WebAPI进行交互是常见的需求,例如获取服务器数据、发送用户信息等。本案例"Android请求WebAPI"将详细讲解如何在Android应用中实现...通过学习和实践,你可以更好地掌握Android与WebAPI的交互技术。
标题中的"_storage_emulated_0_android_data_com.tencent.mobileqq_Tencent_QQfile_recv_实训四.zip" 是一个Android设备上的文件路径,它包含了用户在腾讯QQ应用中接收的文件。这个路径提供了关于文件存储位置和来源...
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中,数据的传输主要依赖于两个关键组件:`DataItem`和`MessageAPI`。`DataItem`用于存储结构化数据,而`MessageAPI`则用于发送轻量级的消息。下面将详细介绍这两个组件以及如何使用它们。 ...
这些示例旨在帮助开发者更好地理解和学习如何在实际应用中使用Android的新特性和API。下面将详细探讨其中的一些关键知识点。 1. **权限管理(Runtime Permissions)** 在Android 6.0中,权限管理有了重大变化,...
用系统自带的文件应用拷贝或移动文件无法到storage/emulated/0/Android/data 目录
2. **Android_API**: 这可能包含了Android的API参考文档,详细列出了每个类、接口、方法和常量的用法,是开发者查询特定API功能的关键资源。开发者可以通过查阅这些文档,了解如何调用系统服务,实现特定功能。 3. ...
Android API是Android操作系统的核心组成部分,它...通过阅读"android api.rar"中的文档,开发者可以学习如何使用这些API来开发功能丰富的Android应用,同时了解最佳实践和注意事项,确保应用能在不同设备上顺畅运行。
这份"Android API手册 语法大全"是开发者们不可或缺的参考资料,它详细介绍了Android操作系统中的各种API,涵盖了从基础到高级的各种功能,帮助开发者们理解并有效地利用这些API进行应用程序的开发。 Android API...
Spring Data MongoDB API。 Spring Data MongoDB 开发文档。
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 ...
两个方法 1. openFileOutput (String name, int mode) name:文件的名称,不能包含分隔符"/",如果...创建的文件保存在/data/data/<package_name>/files目录下。 mode:操作模式 2. openFileInput (String name)
为了了解数据库buffer管理器的工作原理,对数据库底层结构有进一步的了解,编写一个data storage manager和buffer manager。该试验涉及储存和缓冲管理器。缓冲技术,散列技术,文件储存结构,磁盘空间和缓冲模块的...
Android 框架 API 支持 NDEF(NFC Data Exchange Format)标准,用于在 NFC 标签和 Android 设备之间共享数据。 AndroidBeam™ 功能允许设备把一个 NDEF 消息推送到物理/硬件上相互监听的另一个设备上,这提供了比...