- 浏览: 585285 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (182)
- android/ophone开发完全讲义 (4)
- android常用代码 (6)
- android工具 (9)
- android基础 (40)
- android进阶 (75)
- android经验记录 (3)
- android框架 (2)
- android面经 (5)
- android网络 (5)
- android资讯 (0)
- android资源 (17)
- 生活印象 (3)
- androidNDK (4)
- android开源 (1)
- android性能优化 (1)
- android设计 (2)
- android博客论坛收集 (1)
- android手机用户体验 (1)
- android动画 (1)
- android外文资料 (1)
- 汉字排序 (1)
最新评论
-
小猫咪201:
困惑了很久,终于找到答案了
一个常见的android内存泄露 问题 -
王雪龙:
pixels = dps * (density / 160). ...
关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi -
Turr:
楼主给力,解决了我遇到的问题
解决ActivityGroup的sub Activity中spinner的WindowManager$BadTokenException的问题 -
boyuan2000cn:
你好,我转载了您的此篇博客,如果有版权问题,请告诉我,谢谢!转 ...
关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi -
twlkyao:
请教您个问题,如何将drawable对象转换为id类型?
Android中Bitmap, Drawable, Byte,ID之间的转化
在Android中,我们的应用有的时候需要对外提供数据接口,可以有如下几种方法:1)AIDL 2)Broadcast 3)ContentProvider。
使用AIDL需要我们编写AIDL接口以及实现,而且对方也要有相应的接口描述,有点麻烦;使用Broadcast,我们不需要任何接口描述,只要协议文档就可以了,但是有点不好就是,这种方式不直接而且是异步的;使用ContentProvider我们不需要接口描述,只需要知道协议,同时这种方式是同步的,使用方便。下面是ContentProvider实现:
*
*/
package
com.backgroundservice;
import
android.content.ContentProvider;
import
android.content.ContentValues;
import
android.content.UriMatcher;
import
android.database.Cursor;
import
android.database.sqlite.SQLiteDatabase;
import
android.database.sqlite.SQLiteQueryBuilder;
import
android.net.Uri;
import
android.util.Log;
/**
* TODO
*
*
@author
tianlu
*
@version
1.0 Create At : 2010-2-18 下午01:58:39
*/
public
class
TestContentProvider
extends
ContentProvider
{
private
SQLiteDatabase mDb;
private
DatabaseHelper mDbHelper
=
null
;
private
static
final
String DATABASE_NAME
=
"
rssitems.db
"
;
private
static
final
String DATABASE_TABLE_NAME
=
"
rssItems
"
;
private
static
final
int
DB_VERSION
=
1
;
private
static
final
int
ALL_MESSAGES
=
1
;
private
static
final
int
SPECIFIC_MESSAGE
=
2
;
//
Set up our URL matchers to help us determine what an
//
incoming URI parameter is.
private
static
final
UriMatcher URI_MATCHER;
static
{
URI_MATCHER
=
new
UriMatcher(UriMatcher.NO_MATCH);
URI_MATCHER.addURI(
"
test
"
,
"
item
"
, ALL_MESSAGES);
URI_MATCHER.addURI(
"
test
"
,
"
item/#
"
, SPECIFIC_MESSAGE);
}
//
Here's the public URI used to query for RSS items.
public
static
final
Uri CONTENT_URI
=
Uri
.parse(
"
content://test/item
"
);
//
Here are our column name constants, used to query for field values.
public
static
final
String ID
=
"
_id
"
;
public
static
final
String NAME
=
"
NAME
"
;
public
static
final
String VALUE
=
"
VALUE
"
;
public
static
final
String DEFAULT_SORT_ORDER
=
ID
+
"
DESC
"
;
private
static
class
DatabaseHelper
extends
AbstractDatabaseHelper
{
@Override
protected
String[] createDBTables()
{
//
TODO Auto-generated method stub
String sql
=
"
CREATE TABLE
"
+
DATABASE_TABLE_NAME
+
"
(
"
+
ID
+
"
INTEGER PRIMARY KEY AUTOINCREMENT,
"
+
NAME
+
"
TEXT,
"
+
VALUE
+
"
TEXT);
"
;
return
new
String[]
{ sql }
;
}
@Override
protected
String[] dropDBTables()
{
//
TODO Auto-generated method stub
return
null
;
}
@Override
protected
String getDatabaseName()
{
//
TODO Auto-generated method stub
return
DATABASE_NAME;
}
@Override
protected
int
getDatabaseVersion()
{
//
TODO Auto-generated method stub
return
DB_VERSION;
}
@Override
protected
String getTag()
{
//
TODO Auto-generated method stub
return
TestContentProvider.
class
.getSimpleName();
}
}
/**
*
*/
public
TestContentProvider()
{
//
TODO Auto-generated constructor stub
}
/*
* (non-Javadoc)
*
* @see android.content.ContentProvider#delete(android.net.Uri,
* java.lang.String, java.lang.String[])
*/
@Override
public
int
delete(Uri uri, String selection, String[] selectionArgs)
{
//
NOTE Argument checking code omitted. Check your parameters!
int
rowCount
=
mDb.delete(DATABASE_TABLE_NAME, selection, selectionArgs);
//
Notify any listeners and return the deleted row count.
getContext().getContentResolver().notifyChange(uri,
null
);
return
rowCount;
}
/*
* (non-Javadoc)
*
* @see android.content.ContentProvider#getType(android.net.Uri)
*/
@Override
public
String getType(Uri uri)
{
switch
(URI_MATCHER.match(uri))
{
case
ALL_MESSAGES:
return
"
vnd.android.cursor.dir/rssitem
"
;
//
List of items.
case
SPECIFIC_MESSAGE:
return
"
vnd.android.cursor.item/rssitem
"
;
//
Specific item.
default
:
return
null
;
}
}
/*
* (non-Javadoc)
*
* @see android.content.ContentProvider#insert(android.net.Uri,
* android.content.ContentValues)
*/
@Override
public
Uri insert(Uri uri, ContentValues values)
{
//
NOTE Argument checking code omitted. Check your parameters! Check that
//
your row addition request succeeded!
long
rowId
=
-
1
;
rowId
=
mDb.insert(DATABASE_TABLE_NAME, NAME, values);
Uri newUri
=
Uri.withAppendedPath(CONTENT_URI,
""
+
rowId);
Log.i(
"
TestContentProvider
"
,
"
saved a record
"
+
rowId
+
"
"
+
newUri);
//
Notify any listeners and return the URI of the new row.
getContext().getContentResolver().notifyChange(CONTENT_URI,
null
);
return
newUri;
}
/*
* (non-Javadoc)
*
* @see android.content.ContentProvider#onCreate()
*/
@Override
public
boolean
onCreate()
{
//
TODO Auto-generated method stub
try
{
mDbHelper
=
new
DatabaseHelper();
mDbHelper.open(getContext());
mDb
=
mDbHelper.getMDb();
}
catch
(Exception e)
{
e.printStackTrace();
}
return
true
;
}
/*
* (non-Javadoc)
*
* @see android.content.ContentProvider#query(android.net.Uri,
* java.lang.String[], java.lang.String, java.lang.String[],
* java.lang.String)
*/
public
Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
//
We won't bother checking the validity of params here, but you should!
//
SQLiteQueryBuilder is the helper class that creates the
//
proper SQL syntax for us.
SQLiteQueryBuilder qBuilder
=
new
SQLiteQueryBuilder();
//
Set the table we're querying.
qBuilder.setTables(DATABASE_TABLE_NAME);
//
If the query ends in a specific record number, we're
//
being asked for a specific record, so set the
//
WHERE clause in our query.
if
((URI_MATCHER.match(uri))
==
SPECIFIC_MESSAGE)
{
qBuilder.appendWhere(
"
_id=
"
+
uri.getLastPathSegment());
Log.i(
"
TestContentProvider
"
,
"
_id=
"
+
uri.getLastPathSegment());
}
//
Make the query.
Cursor c
=
qBuilder.query(mDb,
projection,
selection,
selectionArgs,
null
,
null
,
sortOrder);
Log.i(
"
TestContentProvider
"
,
"
get records
"
);
c.setNotificationUri(getContext().getContentResolver(), uri);
return
c;
}
/*
* (non-Javadoc)
*
* @see android.content.ContentProvider#update(android.net.Uri,
* android.content.ContentValues, java.lang.String, java.lang.String[])
*/
@Override
public
int
update(Uri uri, ContentValues values, String selection,
String[] selectionArgs)
{
//
NOTE Argument checking code omitted. Check your parameters!
int
updateCount
=
mDb.update(DATABASE_TABLE_NAME, values, selection, selectionArgs);
//
Notify any listeners and return the updated row count.
getContext().getContentResolver().notifyChange(uri,
null
);
return
updateCount;
}
}
android:authorities
="test"
>
</
provider
>
values.put(TestContentProvider.NAME,
"
testname1
"
);
values.put(TestContentProvider.VALUE,
"
testvalu1e
"
);
Uri newAddUri
=
TestActivity.
this
.getContentResolver().insert(TestContentProvider.CONTENT_URI, values);
Cursor c
=
TestActivity.
this
.managedQuery(newAddUri,
new
String[]
{TestContentProvider.NAME}
,
null
,
null
,
null
);
Log.i(
"
TestActivity
"
,
""
+
c.getCount());
if
(c.moveToNext())
{
Log.i(
"
TestActivity
"
, c.getString(
0
));
}
发表评论
-
Android 检查当前是否已经连接上 Internet
2012-02-27 09:28 1java代码: 1 ConnectivityManager ... -
对ContentProvider中getType(Uri uri)和android.intent.category.DEFAULT的理解
2012-02-27 09:21 1630学习了ContentProvider,想做个通讯录,结果 ... -
Android ContentProvider的介绍(很详细)
2012-02-21 17:46 139653一、ContentProvider的概念 Content ... -
一个常见的android内存泄露 问题
2012-02-20 16:11 4938最近在公司看一个算比较大的android项目的源码, ... -
一个常见的android内存泄露 问题
2012-02-20 16:10 0最近在公司看一个算比较大的android项目的源码,发 ... -
Android网络电台的一种实现方案
2012-02-20 15:12 3674随着电子产品的飞速 ... -
NotificationManager和Notification的使用总结
2012-02-16 15:55 1137这几天一直在修改twigee的源代码,其中一个要加入的 ... -
android 如何判断程序是否在前台运行
2012-02-16 15:31 5451private boolean isTopActivit ... -
Android Intent和PendingIntent的区别详细分析
2012-02-16 14:08 1560刚才一个例子中用到了PendingIntent,与之前学过的I ... -
编码问题(UTF-8、gb2312、unicode)
2012-02-14 09:38 1949相信大家很多人跟我一样,对于编码一直感觉云山雾罩,说知道吧?就 ... -
关于androidSDK登录时出现oauth2.0空白页的BUG
2012-02-09 16:21 1421在RenrenListenerFactory中,line 12 ... -
java中yield(),sleep()以及wait()的区别
2012-01-31 18:41 956往往混淆了这三个函数的使用。 从操作系统的角度讲, ... -
Toast大全(五种情形)建立属于你自己的Toast
2012-01-29 17:23 1588Toast用于向用户显示一些帮助/提示。下面我做了5中效果 ... -
Android主流屏幕分辨率介绍
2012-01-18 14:45 1419对于Android游戏开发我们不得不像iPhone那样思 ... -
关于混淆外包jar包出错的解决方法
2012-01-18 11:30 1796-optimizationpasses 5-do ... -
新浪微博SDK
2011-12-28 16:38 1191DEMO程序:http://code.google.co ... -
Android中自定义Dialog外形,去除黑底和白色边框
2011-12-08 16:29 7468在做Android开发中经常会使用到自定义样式的Dialo ... -
汉字排序
2011-12-07 09:44 1092Comparator comparator = Coll ... -
Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
2011-11-29 19:29 13633在Android中,TextView是我们最常用的用来显示文本 ... -
屏幕分辨率适配
2011-10-19 18:55 3135屏幕分辨率:1024x600 d ...
相关推荐
程序例子包含了2个独立的Android程序,其中一个负责提供数据并提供本地操作,另外一个可以跨进程访问提供者提供的数据。...由于没有其他多余的代码,功能针对性很强,是学习Android跨进程数据共享的入门助手。
当数据需要在应用程序之间共享时,可以在某个程序中使用ContentProvider定义URI(统一资源标识符),这样其他应用程序就可以通过这个URI来访问指定的数据。ContentProvider通过定义一系列的CRUD(创建、读取、更新、...
37、ContentProvider、ContentResolver 应用之间共享数据 38、 Service 相当于没有界面的activity 39、Activity与Service运行中通信 40、Service 相当于没有界面的activity 41、AIDL Service android中的跨进程...
Android中控件的使用和布局设计对界面的最终效果有着决定性的影响。例如,按钮(Button)、文本框(TextView)和列表视图(ListView)是用户交互中经常使用的控件。此外,还有一些专门的控件用于显示日期和时间,如...
13大话企业级Android开发_数据库.pdf涵盖了SQLite数据库在Android中的使用,包括数据存储、查询、更新和删除等操作,以及如何通过ContentResolver进行数据操作。 五、文件操作 12大话企业级Android开发_文件.pdf...
6. **ContentProvider**:ContentProvider是Android系统中数据共享的机制,它允许不同应用之间访问和操作数据。在进行增删改查操作时,ContentResolver是与ContentProvider交互的接口。 7. **Cursor**:当查询...
4. **ContentResolver**:在`NoteListActivity`和`NoteEditActivity`中,ContentResolver用于与ContentProvider交互,执行CRUD(创建、读取、更新、删除)操作。例如,`insertNote()`、`updateNote()`和`deleteNote...
在Android中,访问联系人数据需要使用ContentResolver和ContentProvider这两个核心组件。ContentResolver是应用程序与ContentProvider之间的接口,它允许应用程序查询、插入、更新和删除存储在ContentProvider中的...
《SQL基础教程语句汇总》和《SQL语言入门教程》将帮助你巩固SQL知识,《android系统contentprovier和数据库详解》文档将深入讲解二者在Android中的结合,而`ContentProviderDemo.rar`则可能包含了一个实际的...
- Android SDK:熟悉Android开发环境的搭建,包括SDK Manager的使用和Android Studio的集成开发环境。 - Activity生命周期:详细阐述各个状态(如onCreate(), onStart(), onResume(), onPause(), onStop(), ...
4. **ContentResolver**:与ContentProvider通信的桥梁,用于执行查询、插入、更新和删除操作。例如,获取系统所有日历账户,或者创建新的日历事件。 5. **BroadcastReceiver**(可选):可以监听系统时间改变的...
这篇文档将引导你踏入Android开发的世界,通过一个由韩国专家编写的全面入门PPT,来理解Android应用的基本概念和核心组件。 首先,我们要了解的是Application Fundamentals,这是构建Android应用的基础。它涵盖了...
《Android开发教程笔记完全版》是一份专门为Android初学者精心准备的学习资料,涵盖了Android开发的基础到进阶知识,旨在帮助新手快速入门并掌握Android应用开发的核心技能。这份教程全面、详细,是学习Android编程...
一个Android应用通常由多个组件构成,如Activity、Service、BroadcastReceiver和ContentProvider等。对于文件管理器,主要涉及Activity和ContentResolver。Activity是用户界面的核心,而ContentResolver则负责与系统...
ContentResolver是系统服务,用于与内容提供者交互,而ContactsContract则是Android提供的一组常量和类,定义了接触数据的结构和访问方式。 1. **读取联系人**: - 使用ContentResolver的query()方法,传入...
接下来,书中可能深入解析了Android应用程序的基本架构,包括Activity、Service、BroadcastReceiver和ContentProvider四大组件。对于Activity,会讲解生命周期、Intent的使用以及UI设计原则。Service则可能涵盖后台...
在Android基础教程中,我们将深入探讨Android开发的基本概念和技术,为初学者提供一个全面的入门指南。Android是一种广泛使用的开源操作系统,主要用于智能手机和平板电脑,同时也应用于智能电视、汽车导航系统和...
这些操作需要实现对Android的ContentResolver和File类的调用。 3. 多种视图模式:如列表视图、网格视图、详细信息视图等,以满足不同用户的浏览习惯。 4. 浏览历史:保存用户最近访问过的路径,方便快速返回。 5. ...