android的api
A. android api是什麼東西怎麼使用
做程序用的。
B. Android API 是什麼東西
API(Application
Programming
Interface,應用程序編程介面)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟體或硬體的以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節.
簡單來說,就是一套可供調用的系統介面.
C. 怎麼查看android api
查看android api有兩種方式:在線查看與離線查看。 1/reference/packages.html 目前最新的API是android 24,如下圖,左邊可以切換API的版本,右邊可以切換顯示包索引還是類索引。 2. 離線查看 離線查看一般是指在SDK Manager里下載開發者幫助文檔如下圖(最新的是Android 7,即API 24): 下載完成後,會顯示Install狀態。然後,進入SDK安裝目錄,打開名為docs的文件夾,接著在瀏覽器中打開index.html文件,這時可以在頁面左邊看到如下圖的索引: 依次打開Develop-->Reference,然後就可以看到API文檔了。這個docs幾乎包含了開發者官網的全部內容,所以除了查看API,還可以查看官方教程等資源。 另外,雖說這是離線文檔,但裡麵包含了谷歌字體服務和幾個連接谷歌的腳本,所以打開時可能會很慢。解決方案是用一個編輯器比如Notepad++,搜索各文件中包含的訪問谷歌服務的網址字串,並將其替換為空串就可以了。
D. 怎麼看Android開發文檔API
Android開發文檔APIhttps://www.apiref.com/android-zh/index.html,這是安卓中文的api,更容易看懂,一般都是用到的時候查一下。
E. Android騫沖彴楂樺痙API緇忛獙錛氶暱鎸夊湴鍥捐幏鍙栦綅緗淇℃伅
Android寮鍙戣繃紼嬩腑,鏈夊緢澶氭墜鍔挎搷浣滈兘寰堣╀漢鍙堢埍鍙堟仺銆備竴鏂歸潰鍙浠ユ洿渚挎嵎鐨勪綋鐜版洿澶氬姛鑳,鎻愬崌搴旂敤鐨勪綋楠,涓鏂歸潰綣佸嶅氬彉鐨勬搷浣滆儗鍚庢湁鐫璁稿氬紑鍙戞妧宸у拰闅鵑樸傝繖閲屽垎浜涓涓闀挎寜鍦板浘鑾峰彇浣嶇疆淇℃伅鐨勬墜鍔褲 涓轟簡鏇存槑浜,鍏堜笂涓灞曠ず鏁堟灉:闀挎寜鍦板浘鏌愮偣鏄劇ず璇ョ偣鍦扮悊浣嶇疆淇℃伅鍔熻兘 閫氳繃鏋勯犱竴涓猯ocationSelectOverlay綾繪潵瀹氫箟璇ュ姛鑳,鍦ㄥ湴鍥句笂瀵歸暱鎸夋墜鍔胯繘琛岀洃鍚,涓鏃︽湁榪欎釜浜嬩歡鍙戠敓灝辮皟鐢╣etAddressFromServer()鏂規硶鏉ユ樉紺哄湴鍧淇℃伅銆 鍦ㄨュ伐紼嬩腑鍒嗗埆瀹氫箟4涓綾籰ongPressMap.java,locationSelectOverlay.java,popUpPanel.java,Constants.java longPressMap.java涓烘樉紺轟竴涓鍦板浘綾,閫氳繃瀹炰緥鍖栦竴涓猯ocationSelectOverlay綾誨疄鐜伴暱鎸夊湴鍥炬樉紺哄湴鐞嗕綅緗淇℃伅鍔熻兘浠g爜濡備笅: //longPressMap 綾葷戶鎵縈apActivity瀵筸apview璧勬簮榪涜岀$悊 public class longPressMap extends MapActivity { private MapView mMapView; locationSelectOverlay mSelectLay; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //浣跨敤setContentView鏂規硶璋冪敤R.layout.activity_regeocoder甯冨矓鏂囦歡,鏄劇ず鍦板浘 setContentView(R.layout.geocoder); //鑾峰彇鍦板浘瑙嗗浘鐨剗d,璧嬪肩粰mMapView mMapView = ((MapView) findViewById(R.id.geocode_MapView)); // 璁劇疆鍚鐢ㄥ唴緗鐨勭緝鏀炬帶浠 mMapView.setBuiltInZoomControls(true); //瀹炰緥鍖栦竴涓猯ocationSelectOverlay綾 mSelectLay = new locationSelectOverlay(this, mMapView, new popUpPanel(this, mMapView)); //灝嗚ュ姛鑳藉姞杞藉埌姝ゅ湴鍥句笂,鍚鐢ㄩ暱鎸夊湴鍥炬樉紺鴻ョ偣鍦板潃淇℃伅鐨勫姛鑳 mMapView.getOverlays().add(mSelectLay); } } 澶嶅埗浠g爜 locationSelectOverlay紺轟緥浠g爜濡備笅: //locationSelectOverlay綾葷戶鎵縊verlay鎺ュ彛,瀹炵幇OnGestureListener鎵嬪娍鐩戝惉 public class locationSelectOverlay extends Overlay implements OnGestureListener { public popUpPanel mTipPanel; //澹版槑涓涓寮瑰嚭妗嗗硅薄 GeoPoint mSelectPoint; //澹版槑涓涓鍦扮悊鍧愭爣鐐瑰硅薄 MapView mMapView; //澹版槑涓涓鍦板浘瑙嗗浘瀵硅薄 Context mContext; //媧誨姩瀵硅薄 TextView mTipText=null; //澹版槑涓涓鏂囨湰瀵硅薄 private static String nearbystr=""; private GestureDetector gestureScanner; //澹版槑涓涓鎵嬪娍鐩戝惉瀵硅薄 privateGeocoder coder; //澹版槑涓涓閫嗗湴鐞嗙紪鐮佸硅薄 private String addressName=""; //澹版槑涓涓鍦板潃鍚嶇О瀛楃︿覆 //闀挎寜鍦板浘鏌愮偣鑾峰彇淇℃伅鐨勬瀯閫犲嚱鏁般 public locationSelectOverlay(Activity context,MapView mapView,popUpPanel panel) { this.mContext=context; this.mMapView=mapView; this.mTipPanel=panel; gestureScanner = new GestureDetector(this); //澹版槑涓涓鎵嬪娍鐩戝惉瀵硅薄 coder = new Geocoder(context); //澹版槑涓涓閫嗗湴鐞嗙紪鐮佸硅薄 } //鐢℉andler鍑芥暟澶勭悊浼犻掓潵鐨勫湴鍧淇℃伅,鏄劇ず鍦ㄦ枃鏈妗嗕腑 private Handler mGeocoderHandler = new Handler() { public void handleMessage(Message msg) { //濡傛灉鏈夊湴鍧淇℃伅鐨勬秷鎮鍙戦佽繃鏉,灝嗘枃鏈妗嗕腑璁劇疆涓鴻ュ湴鍧淇℃伅 if(msg.what == Constants.REOCODER_RESULT) { if(mTipText!=null) mTipText.setText(addressName); } //濡傛灉鏄劇ず閿欒,鍒欐枃鏈妗嗕腑璁劇疆鎶ラ敊淇℃伅 else if(msg.what == Constants.ERROR) { Toast.makeText(mContext, "鑾峰彇鍦板潃澶辮觸,璇烽噸璇", Toast.LENGTH_SHORT).show(); removeTipPanel(); } } }; //鏄劇ず寮瑰嚭紿楀彛 public boolean showTap(GeoPoint p) { View view = mTipPanel.getView(); mMapView.removeView(view); //甯冨矓鍙傛暟璁劇疆 MapView.LayoutParams geoLP = new MapView.LayoutParams( MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, p, MapView.LayoutParams.BOTTOM_CENTER); //寮瑰嚭紿楀彛鐨勬枃鏈鏄劇ず mTipText = (TextView) view.findViewById(R.id.GeoName); mTipText.setText("姝e湪鍔犺澆鍦板潃..."); mTipText.setOnClickListener(new OnClickListener() { public void onClick(View v) { } }); //鍦ㄥ湴鍥捐嗗浘涓婃坊鍔犺ュ脊鍑虹獥鍙h嗗浘 mMapView.addView(view, geoLP); return false; } //浠庣粡綰搴﹀潗鏍囩偣鑾峰彇瀵瑰簲鐨勫湴鍧淇℃伅 publicvoid getAddressFromServer(final GeoPoint point,final Handler handler) { //澹版槑涓涓綰跨▼ new Thread(){ public void run() { try { // 閫嗗湴鐞嗙紪鐮乬etFromLocation()鍑芥暟鑾峰彇璇ョ偣瀵瑰簲鐨勫墠3涓鍦板潃淇℃伅 ListAddress address = coder.getFromLocation((double)point.getLatitudeE6()/1E6, (double)point.getLongitudeE6()/1E6, 3); if (address != null) { //鑾峰彇絎涓涓鍦板潃淇℃伅 Address addres = address.get(0); addressName = ""; if(addres.getAdminArea()!=null) addressName+=addres.getAdminArea(); if(addres.getSubLocality()!=null) addressName += addres.getSubLocality(); if(addres.getFeatureName()!=null) addressName += addres.getFeatureName(); addressName += "闄勮繎"; handler.sendMessage(Message .obtain(handler, Constants.REOCODER_RESULT)); } } catch (AMapException e) { // TODO Auto-generated catch block handler.sendMessage(Message .obtain(handler, Constants.ERROR)); } } }.start(); //綰跨▼鍚鍔 } //縐昏蛋寮瑰嚭紿楀彛 public void removeTipPanel() { View view = mTipPanel.getView(); mMapView.removeView(view); } //鑾峰彇鎵嬪娍鎿嶄綔 public boolean onTouchEvent(MotionEvent event, MapView mapView) { return gestureScanner.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub return false; } //闀挎寜鍦板浘,寮瑰嚭鎻愮ず妗,鏄劇ず璇ョ偣鍦板潃淇℃伅 @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub int x = (int)e.getX(); int y = (int)e.getY(); mSelectPoint = mMapView.getProjection().fromPixels(x, y); //璋冪敤鏄劇ず鎻愮ず妗嗗嚱鏁 showTap(mSelectPoint); //璋冪敤浠庣粡綰搴︾偣鑾峰彇鍦板潃淇℃伅鍑芥暟 getAddressFromServer(mSelectPoint,mGeocoderHandler); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return false; } 澶嶅埗浠g爜 pouUpPanel瀹氫箟浜嗗脊鍑虹獥鍙g被 public class popUpPanel { private boolean isVisible = false; private MapView mMapView; private View popup; public popUpPanel(Activity paramActivity, MapView paramMapView) { this.mMapView = paramMapView; ViewGroup localViewGroup = (ViewGroup)this.mMapView.getParent(); //璁劇疆寮瑰嚭鐨勮嗗浘鏄痠d涓篟.layout.activity_long_press_map鐨勮嗗浘 this.popup = paramActivity.getLayoutInflater().inflate(R.layout.activity_long_press_map, localViewGroup, false); 鈥 澶嶅埗浠g爜 Constants 瀹氫箟浜嗕紶閫掔殑甯擱噺瀵瑰簲鐨勫礆紝濡俻ublic static finalint REOCODER_RESULT=3000; 琛ㄧず閫嗗湴鐞嗙紪鐮佺粨鏋滃父閲忥紝public staticfinal int ERROR=1001; 琛ㄧず鍑虹幇閿欒甯擱噺銆
F. android API是什麼
簡訊API(簡訊應用程序介面)其實是一組定義、程序及協議的集合,通過 API 介面實現計算機軟體之間的相互通信。API 的一個主要功能是提供通用功能集。程序員通過使用 API 函數開發應用程序,從而可以避免編寫無用程序,以減輕編程任務。 API 同時也是一種中間件,為各種不同平台提供數據共享。
G. 利用 Android 系統原生 API 實現分享功能(2)
在之前的一篇文章 利用 Android 系統原生 API 實現分享功能 中主要說了下實現流程,但具體實施起來其實還是有許多坑要面對。那這篇文章就是提供一個封裝好的 Share2 庫供大家參考。
GitHub 項目地址:Share2
看過上一篇文章的同學應該知道,要調用 Android 系統內建的分享功能,主要有三步流程:
更多相關內容請參考上一篇,這里就不再重復贅述了。
知道大致的實現流程後,其實只要解決下面幾個問題後就可以具體實施了。
這其實是直接決定了最終的實現形態,我們知道常見的使用場景中,只是為了在應用間分享圖片和一些文件,那對於那些只是分享文本的產品而言,兩者實現起來要考慮的問題完全不同。
所以為了解決這個問題,我們可以預先定好支持的分享內容類型,針對不同類型可以進行不同的處理。
在 Share2 中,一共定義了5種類別的分享內容,基本能覆蓋常見的使用場景。在調用分享介面時可以直接指定內容類型,比如像文本、圖片、音視頻、已經其他各種類型文件。
對於不同類別的內容,可能會有不同的來源。比如文本可能就只是一個字元串對象,而對於分享圖片或其他文件,我們需要一個 Uri 來標識一個資源。這其實就引出來具體實施時的一個大問題,如何獲取要分享文件的 Uri,並且這個 Uri 要能被接收分享內容的應用處理才行 。
那麼,如何獲取要分享內容文件的 Uri?如果處理才能讓接收方也能夠根據 Uri 獲取到文件?
我們把文件 Uri 的來源劃分為下面三種類型:
常見場景 :通過文件選擇器獲取一個文件的 Uri
通過這種方式獲取到的 Uri 是由系統 ContentProvider 返回的,在 Android 4.4 之前的版本和之後的版本有較大的區別,我們後面再說怎麼處理。只要先記住這種系統返回給我們的 Uri 就行了。
比如調用系統相機進行拍照或錄制音視頻,要傳入一個生成目標文件的 Uri ,從 7.0 開始我們需要用到 FileProvider 來實現。
如果用到了 FileProvider 就要注意跟系統 ContentProvider 返回 Uri 的區別,比如我們在 Manifest 中對 FileProvider 配置 android:authorities="com.xx.xxx.fileProvider" 屬性,那這時系統返回的 Uri 格式就變成了 : content://com.xx.xxx.fileProvider... ,對於這種類型的 Uri 我們姑且叫 自定義 FileProvider 返回的 Uri ,後面一並說怎麼處理。
我們調用 new File 時需要傳入指定的文件路徑,這個絕對路徑通常是: /storage/emulated/0/... 這種樣式,我們要想調用分享時也要變成 Uri 的形式才可以,那麼如何把文件路徑變成一個文件 Uri ?這個問題下面也一並進行回答。
前面提到了文件 Uri 的三種分類,對應不同類型處理方式也不同,不然你最先遇到的問題就是:
這是由於對系統返回的 Uri 缺失訪問許可權導致,所以要對應用進行臨時訪問 Uri 的授權才行,不然會提示許可權缺失。
對於要分享系統返回的 Uri 我們可以這樣進行處理:
需要注意的是對於自定義 FileProvider 返回 Uri 的處理,即使是設置臨時訪問許可權,但是分享到第三方應用也會無法識別該 Uri
典型的場景就是,我們如果把自定義 FileProvider 的返回的 Uri 設置分享到微信或 QQ 之類的第三方應用,會提示文件不存在,這是因為他們無法識別該 Uri。
關於這個問題的處理其實跟下面要說的把文件路徑變成系統返回的 Uri 一樣,我們只需要把自定義 FileProvider 返回的 Uri 變成第三方應用可以識別系統返回的 Uri 就行了。
創建 FileProvider 時需要傳入一個 File 對象,所以直接可以知道文件路徑,那就把問題都轉換成了: 如何通過文件路徑獲取系統返回的 Uri
下面是根據傳入的 File 對象和類型來查詢系統 ContentProvider 來獲取相應的 Uri,已經按照不同文件類型在不同系統版本下的進行了適配。
其中 forceGetFileUri 方法是通過反射實現的,處理 7.0 以上系統的特殊情況下的兼容性,一般情況下不會調用到。Android 7.0 開始不允許 file:// Uri 的方式在不同的 App 間共享文件,但是如果換成 FileProvider 的方式依然是無效的,我們可以通過反射把該檢測幹掉。
通過 File Path 轉成 Uri 的方式,我們最終統一了調用系統分享時傳入內容 Uri 的三種不同場景,最終全部轉換為傳遞系統返回的 Uri,讓第三方應用能夠正常的獲取到分享內容。
Share2 按照上述方法進行了具體實施,可以通過下面的方式進行集成:
分享圖片到指定界面,比如分享到微信朋友圈
GitHub 項目地址:Share2