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