安卓和原生如何交互
① 安卓原生系统是什么意思
原生安卓系统(Android)是指Google公司发布,没有经过第三方修改的安卓系统,是操作系统最基层的也是最纯净的版本。
一般来说,主要是指各操作系统生产商最初建立的模型,各公司在模型的基础上再不断改进和优化,生产出不同的新版本。
(1)安卓和原生如何交互扩展阅读:
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。
2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。
随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。
Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。 2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。
2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。
参考资料:网络---原生安卓
② 安卓怎样与服务器的交互
利用HTTP请求啊 ,完成登陆等操作啊 , 如果需要与服务器进行数据交互,可以选择XML或者webservice进行数据交互 查看原帖>>
③ apicloud项目如何与安卓原生框架进行数据交互
这个的话我觉得你那个编程里面的互换东西应该是没有写清楚吧或者写的有一点不清楚这样你可以再找一下他的愿原源代码换一下
④ HBuilder移动项目与原生app之间如何交互
可以传参。和原生应用互相传参类似。
第三方应用调用时传递的参数在5+App里可以通过plus.runtime.arguments获取。
⑤ crodova怎么直接调用android原生方法
crodova直接调用android原生方法的时候要了解一些东西,你可以看下!我发你看下,
一.总体结构
Cordova的目标是用HTML,JS,来完成手机客户端的开发,并且是只开发一次可以在各种手机平台上跑,所以理想状态是用JS去控制所有事件。Cordova基于WebView组件。每个继承自DroidGap的Activity对应一个独立的CordovaWebView。Cordova提供了一些列的JS接口来访问Android的native。以插件(Plugin)的形式提供自定义接口给JS端访问。
二.一些疑问
1. Cordova框架是如何启动的?
2. 插件是怎么回事?如何工作的。
3. Cordova的官方文档都是说JS如何访问Android的native,那么在Android的native中是否可以访问JS的函数?如何访问?
三.结构解剖
1.Cordova的启动
1) 如何启动
Cordova提供了一个Class(DroidGap)和一个interface(CordovaInterface)来让Android开发者开发Cordova。一般情况下实现DroidGap即可,因为DroidGap类已经做了很多准备工作,可以说DroidGap类是Cordova框架的一个重要部分;如果在必要的情况下实现CordovaInterface接口,那么这个类中很多DroidGap的功能需要自己去实现。
继承了DroidGap或者CordovaInterface的Activity就是一个独立的Cordova模块,独立的Cordova模块指的是每个实现了DroidGap或者CordovaInterface接口的Activity都对应一套独立的WebView,Plugin,PluginManager,没有共享的。(我觉得这样是很不爽的,没有共享,如果plugin和Activity很多的情况下这样是相当的耗资源)
当在实现了DroidGap或者CordovaInterface接口的Activity的onCreate方法中调用DroidGap的loadUrl方法即启动了Cordova框架。
2)启动过程
public class A extends DroidGap{}
a. 在A的onCreate方法中首先调用super. onCreate()
这一步中创建了一个LinearLayout(.class)布局,以及计算这个Layout的大小及显示的一些方式。在后面的过程中会将一个WebView加到这个LinearLayout中。
b. 再次调用DroidGap 的loadUrl()方法
DroidGap. loadUrl()中首先判断A的CordovaWebView是否实例化,如果没有回实例化一个CordovaWebView对象并将该对象添加到父LinearLayout中去,同时将该LinearLayout添加的ContentView。见以下代码:
public void onCreate(Bundle savedInstanceState) {
…
root = new (this, width, height);
…
}
public void init() {
CordovaWebView webView = new CordovaWebView(DroidGap.this);
this.init(webView,
new CordovaWebViewClient(this, webView),
new CordovaChromeClient(this, webView));
}
public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) {
this.appView = webView;
this.appView.setId(100);
…
this.root.addView(this.appView);
setContentView(this.root);
}
public void loadUrl(String url) {
if (this.appView == null) {
this.init();
}
…
}
这样就完成了我们在一般开发中使用的模式:
public void onCreate(Bundle savedInstanceState) {
super. onCreate(Bundle savedInstanceState);
setContentView(resID);
…
}
在初始化完CordovaWebView后调用CordovaWebView.loadUrl()。此时完成Cordova的启动。
c. 在实例化CordovaWebView的时候, CordovaWebView对象会去创建一个属于当前CordovaWebView对象的插件管理器PluginManager对象,一个消息队列NativeToJsMessageQueue对象,一个javascriptInterface对象ExposedJsApi,并将ExposedJsApi对象添加到CordovaWebView中,JavascriptInterface名字为:_cordovaNative。
d. Cordova的JavascriptInterface
在创建ExposedJsApi时需要CordovaWebView的PluginManager对象和NativeToJsMessageQueue对象。因为所有的JS端与Android native代码交互都是通过ExposedJsApi对象的exec方法。
在exec方法中执行PluginManager的exec方法,PluginManager去查找具体的Plugin并实例化然后再执行Plugin的execute方法,并根据同步标识判断是同步返回给JS消息还是异步。由NativeToJsMessageQueue统一管理返回给JS的消息。
e. 何时加载Plugin,如何加载
Cordova在启动每个Activity的时候都会将配置文件中的所有plugin加载到PluginManager。那么是什么时候将这些plugin加载到PluginManager的呢?
在b中说了最后会调用CordovaWebView.loadUrl(),对,就在这个时候会去初始化PluginManager并加载plugin。PluginManager在加载plugin的时候并不是马上实例化plugin对象,而是只是将plugin的Class名字保存到一个hashmap中,用service名字作为key值。
当JS端通过JavascriptInterface接口的ExposedJsApi对象请求Android时,PluginManager会从hashmap中查找到plugin,如果该plugin还未实例化,利用java反射机制实例化该plugin,并执行plugin的execute方法。
2.Cordova插件
在‘1’中已经接触了些Cordova插件的东西,这里总结下Cordova的插件
Cordova插件只是一个普通的java类,没有什么特殊之处。插件中的execute方法只是Cordova框架的一个规定。
Cordova为了方便于插件的管理,所以引进了一个PluginManager来管理插件。在ExposedJsApi中,PluginManager起一个代理作用。
在原生态的WebView开发中,我们可以给WebView添加一个JavascriptInterface对象来使JS可以访问android的代码;在Cordova也有一个这样的对象ExposedJsApi。
在ExposedJsApi中,它将请求转发给我们的PluginManager,这个时候PluginManager会根据给的service的名字来查找具体的Plugin并执行。
所以,我认为Cordova插件是android端的API,提供给JS。
在Cordova虽然有JavascriptInterface对象ExposedJsApi,但在JS端并不是真正通过android提供的window.JavascriptInterface.request这种方式来请求。在JS端,Cordova是通过JS的prompt()函数触发ChromeClient中的onJsPrompt方法,通过onJsPrompt去获取到请求,再将请求转发给ExposedJsApi。
注:在Cordova中,Java端和JavaScript端都准备了代码来使用特殊URL('http://cdv_exec/' + service + '#' + action + '#' + callbackId + '#' + argsJson;)的方式交互请求,但并没有真正使用。
3.Cordova的数据返回
Cordova中通过exec()函数请求android插件,数据的返回可同步也可以异步于exec()函数的请求。
在开发android插件的时候可以重写public boolean isSynch(String action)方法来决定是同步还是异步。
Cordova在android端使用了一个队列(NativeToJsMessageQueue)来专门管理返回给JS的数据。
1)同步
Cordova在执行完exec()后,android会马上返回数据,但不一定就是该次请求的数据,可能是前面某次请求的数据;因为当exec()请求的插件是允许同步返回数据的情况下,Cordova也是从NativeToJsMessageQueue队列头pop头数据并返回。然后再根据callbackID反向查找某个JS请求,并将数据返回给该请求的success函数。
2)异步
Cordova在执行完exec()后并不会同步得到一个返回数据。Cordova在执行exec()的同时启动了一个XMLHttpRequest对象方式或者prompt()函数方式的循环函数来不停的去获取NativeToJsMessageQueue队列中的数据,并根据callbackID反向查找到相对应的JS请求,并将该数据交给success函数。
注:Cordova对本地的HTML文件(file:// 开头的URL)或者手机设置有代理的情况下使用XMLHttpRequest方式获取返回数据,其他则使用prompt()函数方式获取返回数据。
4.Android代码访问JS
翻了Cordova的官方文档和Cordova代码,发现Cordova并未提供一种方式来让我们在Android中去访问JS。现在想来可能是这样的道理(个人观点),因为Cordova框架的性质就是一个用HTML+JS来开发APP的,相当于java用的虚拟机层(比喻不是很恰当),所以Cordova未提供Android访问JS的方式。
如果需要Android访问JS,只有使用原生态WebView开发的方式
loadUrl(“javascript:xxx”)
因为在Cordova框架中需要访问JS的时候也是使用的这种方式,如下(Activity的onResume事件):
public void handleResume(boolean keepRunning, boolean activityResultKeepRunning)
{
// Send resume event to JavaScript
this.loadUrl("javascript:try{cordova.fireDocumentEvent('resume');}catch(e){console.log('exception firing resume event from native');};");
// Forward to plugins
if (this.pluginManager != null) {
this.pluginManager.onResume(keepRunning);
}
// Resume JavaScript timers (including setInterval)
this.resumeTimers();
paused = false;
}
⑥ 在Android上怎样实现JAVA和JS交互
在Android的开发过程中、遇到一个新需求、那就是让Java代码和Javascript代码进行交互、在IOS中实现起来很麻烦、而在Android中相对来说容易、Android对这种交互进行很好的封装、其实可以很简单的用Java代码调用WebView中的js函数、也可以用WebView中的js来调用Android应用中的Java代码
一、网页的JS代码调用ANDROID中JAVA代码的方法
在网页中调用java代码、需要在webview控件中添加javascriptInterface
contentWebView = (WebView) findViewById(R.id.webview);
//启用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js对象名");
在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以的。
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里对Android应用的UI进行处理
}
});
}
在网页中、只需要像调用js方法一样、进行调用就可以
<a onClick="window.js对象名.jsFunction(´hello world´)" >
点击调用java代码并传递参数
</a>
二、ANDROID中JAVA代码调用网页的JS代码的方法
Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样
// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");
三、JAVA和JS交互注意事项
1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法
2、Java 调用 js 的函数、没有返回值、调用就控制不到
3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间
4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验
⑦ 原生APP中js怎样与Android和ios进行交互
一、对于Android和ios我们要执行不同的操作,下面是判断系统的js代码
// alert(ismobile(1)); 1表示Android,0表示ios
function ismobile(test){
var u = navigator.userAgent, app = navigator.appVersion;
if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){
if(window.location.href.indexOf("?mobile")<0){
try{
if(/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)){
return '0';
}else{
return '1';
}
}catch(e){}
}
}else if( u.indexOf('iPad') > -1){
return '0';
}else{
return '1';
}
}
二、js调用app端函数,下面是js代码
if(ismobile(1)==1){
Android.setTypeActivity(id,type,href);
}else{
jsToios(id,type,href);
}
setTypeActivity是Android端定义的函数,jsToios是ios端定义的函数,括号里是js端传递的参数。
三、至于js端怎样获取app端的数据,只需在js端提供给app端函数名字,在通知app端调用即可
四、还有一种方法可以不通过app的方法将数据传递给另一个页面,那就是通过URL的方式
在本页面将数据拼接在ip后面
在另外一个页面通过下面方法获取URL后的参数
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i ++) {
theRequest[strs[i].split("=")[0]]=decodeURIComponent(strs[i].split("=")[1]);
}
}
return theRequest;
}
// 获取URL参数
var Request = new Object();
Request = GetRequest();
var name;
name = Request['name'];
⑧ 原生安卓和定制安卓有什么区别
国产定制安卓基本允许在免Root状态下,就能控制应用自启、权限和相互唤醒等原本是取得Root权限之后才能实现的功能,甚至这一功能还在三星等部分国际大厂的系统中实现;而原生Android系统则无法对这些直接进行设置,只能Root后通过第三方应用进行管理,且目前并不是太稳定。
由于国内的安卓应用滥用唤醒权限和通知栏推送,因而经常会导致多条推送一起骚扰用户,让用户防不胜防,而这一功能实际上是不少国内用户所需要的。
原生Android的界面和字体都是完全统一的,系统内没有自带的主题引擎。注意,原生安卓不等于CM等支持主题引擎的第三方ROM。而定制安卓为了张扬用户的个性,基本都会内置专用的主题或字体引擎方便用户更换。
由于加入了各种各样的定制功能,定制安卓的系统往往显得比较臃肿,即使另外不运行app,运存占用也是非常大的。而原生Android主打的则是极度精简,占用运存较小,即使是小运存手机,在管理好权限的基础上也不至于卡死。
国产定制安卓在交互理念上有些像iOS,就是把所有的功能都给用户准备好了,这样用户只需要自己开关某些功能,即可充分实现自定义。
而原生Android则不同,其设置菜单仅有一些最基本的选项,以满足用户使用。如果你动手能力较强的话,原生Android反而能提供更大的发挥空间让你充分的DIY。
原生安卓内置的应用商店是安卓系统的官方商店,前身叫安卓市场(Android Market),现在叫作谷歌Play商店。其拥有最正规、权限最干净且更新速度最快的一手国内外安卓app资源,但同样因为不可描述原因无法直接访问。
因此,国内各大厂商也在定制安卓中加入了自己的应用商店,很多都是挂靠在应用宝等第三方市场下,实现资源互通。
⑨ 安卓原生系统和普通安卓系统的区别
1. 原生android系统是指Google公司发布,没有经过第三方修改的安卓系统。比如lephone的leos,m9的系统以及移动的ophone
2. 普通安卓系统就是系统虽然都是安卓,不同品牌的手机肯定会自己定制一些东西,如桌面,软件,解锁等
原生系统的优势在于,google官方会以原生系统为开发标准,新的android系统都是原生的。在没有添加任何厂商定制功能的基础上,纯原生的效率应该是最好的。而且升级也会比较优先。
原生android系统是指google公司发布,没有经过第三方修改的安卓系统。通常手机app的开发方向包括webview和原生两个,webview可以统一平台,开发迅速等特点,但是反应速度却是很慢。
原生android系统是指Google公司发布的最原始最纯净的安卓系统,没有经过任何(手机厂商)的第三方修改,是手机中最完美的系统。因为开源导致一样的安卓系统有的很流畅有的很卡顿,现在一些手机玩家已经不考虑手机的硬件配置只要它是原生就行
⑩ 安卓系统有原生的和非原生的有什么区别
原生的是指完全都是google出品的样子,非原生的是指在此基础上修改过的,比如lephone的leos,m9的系统以及移动的ophone,建议要买就买原生的