Android手機應用介面大全
顯示網頁:
1. Uri uri = Uri.parse("http://www.google.com");
2. Intent it = new Intent(Intent.ACTION_VIEW,uri);
3. startActivity(it);
顯示地圖:
1. Uri uri = Uri.parse("geo:38.899533,-77.036476");
2. Intent it = new Intent(Intent.Action_VIEW,uri);
3. startActivity(it);
路徑規劃:
1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
2. Intent it = new Intent(Intent.ACTION_VIEW,URI);
3. startActivity(it);
撥打電話:
調用撥號程式
1. Uri uri = Uri.parse("tel:xxxxxx");
2. Intent it = new Intent(Intent.ACTION_DIAL, uri);
3. startActivity(it);
1. Uri uri = Uri.parse("tel.xxxxxx");
2. Intent it =new Intent(Intent.ACTION_CALL,uri);
3. 要使用這個必須在設定檔中加入
調用發送短信的程式
1. Intent it = new Intent(Intent.ACTION_VIEW);
2. it.putExtra("sms_body", "The SMS text");
3. it.setType("vnd.android-dir/mms-sms");
4. startActivity(it);
發送短信
1. Uri uri = Uri.parse("smsto:0800000123");
2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
3. it.putExtra("sms_body", "The SMS text");
4. startActivity(it);
發送彩信
1. Uri uri = Uri.parse("content://media/external/images/media/23");
2. Intent it = new Intent(Intent.ACTION_SEND);
3. it.putExtra("sms_body", "some text");
4. it.putExtra(Intent.EXTRA_STREAM, uri);
5. it.setType("image/png");
6. startActivity(it);
發送Email
1.
2. Uri uri = Uri.parse("mailto:xxx@abc.com");
3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
4. startActivity(it);
1. Intent it = new Intent(Intent.ACTION_SEND);
2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
4. it.setType("text/plain");
5. startActivity(Intent.createChooser(it, "Choose Email Client"));
1. Intent it=new Intent(Intent.ACTION_SEND);
2. String[] tos={"me@abc.com"};
3. String[] ccs={"you@abc.com"};
4. it.putExtra(Intent.EXTRA_EMAIL, tos);
5. it.putExtra(Intent.EXTRA_CC, ccs);
6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
8. it.setType("message/rfc822");
9. startActivity(Intent.createChooser(it, "Choose Email Client"));
添加附件
1. Intent it = new Intent(Intent.ACTION_SEND);
2. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
3. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
4. sendIntent.setType("audio/mp3");
5. startActivity(Intent.createChooser(it, "Choose Email Client"));
播放多媒體
1.
2. Intent it = new Intent(Intent.ACTION_VIEW);
3. Uri uri = Uri.parse("file:///sdcard/song.mp3");
4. it.setDataAndType(uri, "audio/mp3");
5. startActivity(it);
1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. startActivity(it);
Uninstall 程式
1. Uri uri = Uri.fromParts("package", strPackageName, null);
2. Intent it = new Intent(Intent.ACTION_DELETE, uri);
3. startActivity(it);
Android 源碼分析-打電話和發短信
1. ITelephony介面和ISms介面以及AIDL
在我們的Android應用中,當需要實現電話撥號時,我們需要進行如下調用
ITelephony phone = (ITelephony)ITelephony.Stub.asInterface(ServiceManager.getService("phon"))
phone.dial("10086");
對於短信應用,我們需要的是調用SmsManager,代碼如下
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage("10086",null,"hi,this is sms",null,null);
這裡,SmsManager對ISms做了一層包裝,實質上是通過調用
ISms simISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));
simISms.sendRawPdu....
可以看到,應用都是採用AIDL來實現IPC的跨進程調度。
對於AIDL應用,調用進程方存在的是一個實現介面的Proxy物件,通過Proxy物件與被調用進程中的Stub物件進行
通訊來實現IPC的跨進程調度,所以,在被調用進程一端必定有一個ITelephony.Stub類以及ISms.Stub類的實現。
2. PhoneInterfaceManager和SimSmsInterfaceManager
ITelephony.Stub 的實現類為com.android.phone.PhoneInterfaceManager
ISms.Stub的實現類為com.android.internal.telephony.gsm.SimSmsInterfaceManager
從這兩個類的構造器的調用代碼裡可以很清楚的看到進行了Service的註冊工作
ServiceManager.addService("phone",this);
ServiceManager.addService("isms",this);
3. PhoneApp,InCallScreen,PhoneUtils及其他相關類
從SimSmsInteferManager的相關方法實現中可以看到,具體就是調用GSMPhone的SmsDispatcher實例來進行相關操作的。
從PhoneInterfaceManager會維持一個Phone物件的引用,當撥號應用時,PhoneInterfaceManager會將構造好的Intent傳遞
給PhoneApp應用,該Intent的className指定則為InCallScreen,從中我們可以看到InCallScreen具體是通過PhoneUtils調用Phone的
相關方法來實現。
PhoneInterfaceManager怎麼獲取到對應的Phone物件,然後又怎麼將Phone物件傳遞到InCallScreen中呢?
具體這裡涉及到了PhoneApp這個類,從這個類維護了一個 PhoneInterfaceManager的引用(phoneMgr)以及一個Phone引用(phone),
從該類的onCreate方法中我們可以清楚的看到,PhoneApp通過PhoneFactory獲取了一個Phone實例,並通過該實例實現了PhoneInterfaceManager物件。
因此,我們現在只需要關注PhoneFactory具體提供的是一個什麼樣的Phone實例了。
另外,PhoneApp類還提供了一個靜態方法getInstance供InCallScreen調用,InCallScreen正是通過調用該方法獲得PhoneApp實例從而
獲得對應的Phone實例的。
接下來,我們通過查看PhoneFactory的方法可以看到,Phone物件對應的就是一個GSMPhone實例。
4。GSMPhone與RIL
從GSM的構造器可以看出,他依賴一個CommandInterface介面實例,通過PhoneFactory的makeDefaultPhones方法,我們可以看到,根據系統環境變數
ro.radio.noril來判斷是否需要採用RIL框架實現,如果該參數不為空,則採用Simultedcommands(主要是為了測試需要提供的類比實現).否則,採用RIL。
通過Google才知道,RIL其實是智慧手機上實現AP與BP之間通信的一種設計思想,具體大家可以參見這篇文章http://www.eetchina.com/ARTICLES ... DF?SOURCES=DOWNLOAD
在RIL.java 中我們很驚喜的看到,RIL對對消息的處理是將消息通過LocalSocket發送到以rild為名稱的有名埠。這個有名Socket的創建在ril.cpp代碼中。
s_fdListen = android_get_control_socket(SOCKET_NAME_RIL)
原來Android通話和發短信的應用是JAVA與C++代碼之間透過Socket連接來傳輸消息來實現的。
5.關於C代碼與硬體之間的交互
這部分工作其實就是C代碼通過串口發送AT指令來撥號,收發短信。
沒有留言:
張貼留言