主题:[原创]Android项目开发范例大全 书连载
lili456
[专家分:0] 发布于 2012-07-30 11:06:00
Android项目开发范例大全
不通过一些项目上手,咋个能精通Android开发呢?本书这些项目案例的开发方法和流程,值得每一个手机开发者学习和借鉴。
当当地址:http://product.dangdang.com/product.aspx?product_id=22801184
回复列表 (共17个回复)
11 楼
lili456 [专家分:0] 发布于 2012-07-30 11:27:00
8) 播放音乐
Uri uri = Uri.parse("file:///sdcard/music/wakemeup.mp3″);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setType("audio/mp3″);
startActivity(intent);
这段代码的效果就是播放sd卡中的music文件夹下的wakemeup.mp3文件;setType方法标明该文件的打开方式为mp3,运行结果如图7-9所示(在2.3的版本中音乐文件的默认打开方式为弹出一个小的播放音乐Dialog,不同版本的Android可能不一样):
[img]http://www.tu265.com/di-777abdf9803622dada82f843850e5c0d.png[/img]
12 楼
lili456 [专家分:0] 发布于 2012-07-30 11:29:00
9) 打开发送邮件界面
Uri uri= Uri.parse("mailto:shinado023@163.com");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(intent);
这段代码的运行结果就是用你的账号(如果你设置了邮箱账号的话)撰写给邮箱地址为shinado023@163.com的邮件,运行结果如图7-10所示:
[img]http://www.tu265.com/di-f0fa48d0afe7c4de39d1f00904f54c8d.png[/img]
13 楼
lili456 [专家分:0] 发布于 2012-07-30 11:30:00
10) 在Google Market中搜索应用
Uri uri = Uri.parse("market://search?q=angry bird");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
这段代码的运行结果为打开Google Market并搜索内容为“angry bird”的应用,运行结果如图7-11所示:
[img]http://www.tu265.com/di-ae64a7996d62c90fb677f6934189a832.png[/img]
14 楼
lili456 [专家分:0] 发布于 2012-07-30 11:32:00
11) 在Google Market中查看某个应用的信息
Uri uri = Uri.parse("market://details?id=123456789");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
使用这个方法我们需要知道应用在Google Market中的id,然后就会根据id来显示应用的信息。我们在使用某些软件的时候会由一键连接到市场中的某个应用,使用的就是这个方法。我们假设angry bird的id为123456789,则运行结果将会是如图7-12所示:
[img]http://www.tu265.com/di-9a9aaa4fd883d77404312351fc37f4a1.png[/img]
15 楼
lili456 [专家分:0] 发布于 2012-07-30 11:33:00
7.2.2 接收短信和接收电话
我们通过Broadcast来实现短信的监听和来电的监听。但是它们之间有一点细微的区别:短信的广播是有序的,来电是无序的。有序广播和无序广播的区别在于:有序广播总是由优先级别最高的广播接收器开始接收,再传给下一个次高优先级别的广播接收器进行处理,直到有人把广播丢弃或者没人接收。
1) 来电信息的接收
我们注册一个action为TelephonyManager.ACTION_PHONE_STATE_CHANGED 的广播接收器:
IntentFilter filter = new IntentFilter();
filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
registerReceiver(mReceiver, filter);
接收来电需要添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
添加BroadcastReceiver的处理:
private BroadcastReceiver mReceiver = new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent) {
if(TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)){
TelephonyManager telephony =
(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
int state = telephony.getCallState();
String number =
intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.e("tel", "等待接电话="+number);
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.e("tel", "电话挂断="+number);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.e("tel", "通话中="+number);
break;
}
}
}
}
运行结果如图7-13所示:
[img]http://www.tu265.com/di-0889eb867a60ff3b58936f49d650c5a8.png[/img]
16 楼
lili456 [专家分:0] 发布于 2012-07-30 11:34:00
2) 短信的接收
同样,我们也需要BroadcastReceiver来接收短信的信息,该BroadcastReceiver的action为:"android.intent.action.PHONE_STATE"
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
registerReceiver(mReceiver, filter);
接收短信需要添加权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
添加BroadcastReceiver的处理:
private BroadcastReceiver mReceiver = new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if(bundle != null)
{
Object[] myObjPdus = (Object[]) bundle.get("pdus");
SmsMessage[] message = new SmsMessage[myObjPdus.length];
for(int i=0; i<myObjPdus.length; i++)
{
message[i] = SmsMessage.createFromPdu((byte[]) myObjPdus[i]);
}
for(SmsMessage currentMessage : message)
{
String num = currentMessage.getDisplayOriginatingAddress();
String sms = currentMessage.getDisplayMessageBody();
Log.e("sms", num+" "+sms);
}
}
}
}
17 楼
lili456 [专家分:0] 发布于 2012-07-30 11:35:00
7.2.3 查找和添加联系人
1) 查找联系人
查找联系人实际上就是对系统中的数据库表进行操作。具体的操作被封装在ContentResolver这个类中,我们只调用它的query方法即可:
private String[] persons = new String[]{
Contacts.People.NUMBER,
Contacts.People.NAME};
private void getContacts()
{
ContentResolver cr = context.getContentResolver();
//查询指定条件的联系人,这里的查询条件为号码非空,也就是查询所有联系人
Cursor c = cr.query(Contacts.People.CONTENT_URI, persons, Contacts.People.NUMBER + " is not null", null,
Contacts.People.DEFAULT_SORT_ORDER);
c.moveToFirst();
while(c.moveToNext())
{
Log.e("contacts", c.getString(0)+" "+c.getString(1));
}
}
程序运行结果如图7-14所示:
[img]http://www.tu265.com/di-88733a55e59c2c83343160f95695bfdd.png[/img]
2) 添加联系人
添加联系人需要使用ContentResolver来对系统联系人的表进行插入操作:
private void addContact(String tel, String name){
//获取系ConteneResolver对象
ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues();
//获取系统返回的rawContactId
Uri rawContactUri = cr.insert(RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
//往data表入姓名数据
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, name);
cr.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
//往data表入电话数据
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, tel);
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
cr.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
}
我来回复