回 帖 发 新 帖 刷新版面

主题:[原创]Android项目开发范例大全  书连载



Android项目开发范例大全



不通过一些项目上手,咋个能精通Android开发呢?本书这些项目案例的开发方法和流程,值得每一个手机开发者学习和借鉴。



当当地址:http://product.dangdang.com/product.aspx?product_id=22801184



回复列表 (共17个回复)

11 楼

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 楼

    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 楼

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 楼


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 楼

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 楼

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 楼

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);
}
    

我来回复

您尚未登录,请登录后再回复。点此登录或注册