2014年10月4日 星期六

[Android] 手機應用介面大全

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. 要使用這個必須在設定檔中加入

發送SMS/MMS
調用發送短信的程式

  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);
   這裡,SmsManagerISms做了一層包裝,實質上是通過調用
   ISms simISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));
   simISms.sendRawPdu....
   
  可以看到,應用都是採用AIDL來實現IPC的跨進程調度。
  對於AIDL應用,調用進程方存在的是一個實現介面的Proxy物件,通過Proxy物件與被調用進程中的Stub物件進行
  通訊來實現IPC的跨進程調度,所以,在被調用進程一端必定有一個ITelephony.Stub類以及ISms.Stub類的實現。

  2. PhoneInterfaceManagerSimSmsInterfaceManager
   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的相關方法實現中可以看到,具體就是調用GSMPhoneSmsDispatcher實例來進行相關操作的。
  從PhoneInterfaceManager會維持一個Phone物件的引用,當撥號應用時,PhoneInterfaceManager會將構造好的Intent傳遞
PhoneApp應用,該IntentclassName指定則為InCallScreen,從中我們可以看到InCallScreen具體是通過PhoneUtils調用Phone
相關方法來實現。
  PhoneInterfaceManager怎麼獲取到對應的Phone物件,然後又怎麼將Phone物件傳遞到InCallScreen中呢?
  具體這裡涉及到了PhoneApp這個類,從這個類維護了一個 PhoneInterfaceManager的引用(phoneMgr)以及一個Phone引用(phone)
從該類的onCreate方法中我們可以清楚的看到,PhoneApp通過PhoneFactory獲取了一個Phone實例,並通過該實例實現了PhoneInterfaceManager物件。
因此,我們現在只需要關注PhoneFactory具體提供的是一個什麼樣的Phone實例了。
  另外,PhoneApp類還提供了一個靜態方法getInstanceInCallScreen調用,InCallScreen正是通過調用該方法獲得PhoneApp實例從而
獲得對應的Phone實例的。
  接下來,我們通過查看PhoneFactory的方法可以看到,Phone物件對應的就是一個GSMPhone實例。

  4GSMPhoneRIL
  從GSM的構造器可以看出,他依賴一個CommandInterface介面實例,通過PhoneFactorymakeDefaultPhones方法,我們可以看到,根據系統環境變數
ro.radio.noril來判斷是否需要採用RIL框架實現,如果該參數不為空,則採用Simultedcommands(主要是為了測試需要提供的類比實現).否則,採用RIL
  通過Google才知道,RIL其實是智慧手機上實現APBP之間通信的一種設計思想,具體大家可以參見這篇文章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通話和發短信的應用是JAVAC++代碼之間透過Socket連接來傳輸消息來實現的。

  5.關於C代碼與硬體之間的交互
  這部分工作其實就是C代碼通過串口發送AT指令來撥號,收發短信。


沒有留言: