欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

android混合開(kāi)發(fā),android混合開(kāi)發(fā)怎么獲取flutter界面的截圖

Flutter(六)Android與Flutter混合開(kāi)發(fā)(Hybird)

如果我們目前的項(xiàng)目是Android的,但是接下來(lái)我們希望部分頁(yè)面可以使用Flutter進(jìn)行開(kāi)發(fā),甚至我們希望在Native頁(yè)面中嵌入FlutterUI組件,那么我們?cè)撊绾螌?shí)現(xiàn)呢?

成都創(chuàng)新互聯(lián)公司"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷(xiāo),產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿(mǎn)足企業(yè)的營(yíng)銷(xiāo)需求!成都創(chuàng)新互聯(lián)公司具備承接各種類(lèi)型的成都網(wǎng)站制作、做網(wǎng)站項(xiàng)目的能力。經(jīng)過(guò)十多年的努力的開(kāi)拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶(hù)的一致好評(píng)。

假設(shè)你現(xiàn)在Android項(xiàng)目的目錄的結(jié)構(gòu)是這樣的

這時(shí)候如果你想創(chuàng)建一個(gè)Flutter模塊,使得Android模塊和Flutter模塊之間可以進(jìn)行交互,我們可以通過(guò)Android Studio新建一個(gè)Flutter Module,具體過(guò)程是:File — New — New Module ,之后選擇Flutter Module,指定Project Location的路徑為

也就是說(shuō),最終你的項(xiàng)目結(jié)構(gòu)會(huì)是這樣的

接下來(lái)在Android Module的 build.gradle 文件中添加flutter依賴(lài)

先創(chuàng)建一個(gè)Flutter頁(yè)面

這里比較重要的是 window.defaultRouteName 這個(gè)字段,這個(gè)字段可以接收從Native傳遞過(guò)來(lái)的參數(shù) (下文我們會(huì)介紹原生傳遞參數(shù)的方法),也就是說(shuō)通過(guò)這個(gè)字段我們就可以進(jìn)行Flutter頁(yè)面的路由的分發(fā)

我們可以直接在Android的 MainActivity 中啟動(dòng)一個(gè) FlutterActivity ,這里的 initialRoute 方法中傳遞的參數(shù)就對(duì)應(yīng)Flutter層的 window.defaultRouteName

注意:需要在 AndroidManifest.xml 注冊(cè) FlutterActivity

自己創(chuàng)建一個(gè) FlutterAppActivity 繼承自 FlutterActivity

在 MainActivity 中啟動(dòng) FlutterAppActivity (另外別忘了在 AndroidManifest.xml 中注冊(cè) FlutterAppActivity )

兩種啟動(dòng)方式的區(qū)別

如果單純只是想打開(kāi)一個(gè)Flutter頁(yè)面,兩種方式實(shí)際上基本沒(méi)有太大區(qū)別,第一種方式也許還會(huì)更簡(jiǎn)單一點(diǎn)。但是,在Flutter開(kāi)發(fā)中,我們往往還需要開(kāi)發(fā)一些Native插件供Flutter調(diào)用,如果使用復(fù)寫(xiě) FlutterActivity 的方式更有利于我們?cè)?FlutterActivity 中注冊(cè)我們的Native插件,所以實(shí)際開(kāi)發(fā)中一般推薦使用第二種方式

擴(kuò)展思考

initialRoute 從名稱(chēng)上看起來(lái)是Flutter提供給我們進(jìn)行Native與Flutter交互的路由跳轉(zhuǎn)的,但是實(shí)際上他就是一個(gè)字符串,我們不僅僅可以傳遞一個(gè)路由名稱(chēng),有時(shí)候我們也可以通過(guò)這個(gè)參數(shù)傳遞一串JSON數(shù)據(jù),然后在Flutter端進(jìn)行解析,這樣我們就可以通過(guò)這個(gè)參數(shù)做更多的事情

activity_main.xml

FrameLayout 用于承載Flutter組件

MainActivity.java

使用 FragmentManager 將 FlutterFragment 添加到 FrameLayout 容器中

運(yùn)行結(jié)果

上半部分是原生的TextView,下半部分是Flutter的Text組件

本節(jié)主要介紹了Native和Flutter之間的頁(yè)面跳轉(zhuǎn),以及同一個(gè)頁(yè)面中Native與Flutter組件的組合。接下來(lái)會(huì)介紹如何編寫(xiě)Android插件與Flutter進(jìn)行數(shù)據(jù)交互

Android混合開(kāi)發(fā)該怎么搞

Cordova是一個(gè)廣泛使用的Hybrid開(kāi)發(fā)框架,它提供了一套js和Native交互規(guī)范

在Cordova的SystemWebViewEngine類(lèi)中可以

看到私有靜態(tài)void exposeJsInterface(WebView webView,CordovaBridge橋){

if((Build.VERSION.SDK_INT Build.VERSION_CODES.JELLY_BEAN_MR1)){

Log.i(TAG,“自Android版本以來(lái)已禁用addJavascriptInterface()橋接?!保?

//錯(cuò)誤是Java Strings不會(huì)自動(dòng)轉(zhuǎn)換為JS字符串。

//在JS方面解決這個(gè)問(wèn)題并不困難,但是更容易

使用提示橋來(lái)代替。

返回;

}

webView.addJavascriptInterface(新SystemExposedJsApi(橋), “_cordovaNative”);

}

因此當(dāng)Android系統(tǒng)高于4.2時(shí),Cordova還是使用addJavascriptInterface這種方式,因?yàn)檫@個(gè)方法在高版本上安全而且簡(jiǎn)單,低于4.2的時(shí)候,用什么方法呢?

答案是WebChromeClient.onJsPrompt方法

WebView可以設(shè)置一個(gè)WebChromeClient對(duì)象,它可以處理js的3個(gè)方法

onJsAlert

onJsConfirm

onJsPrompt

這3個(gè)方法分別對(duì)應(yīng)js的警告,確認(rèn),提示方法,因?yàn)橹挥刑崾窘邮辗祷刂?,所以js調(diào)用一個(gè)Native方法后可以等待Native返回一個(gè)參數(shù)。下面是cordova.js中的一段代碼:

/ **

*實(shí)現(xiàn)ExposedJsApi.java的API,但使用prompt()進(jìn)行通信。

*這是在JellyBean之前使用的,其中addJavascriptInterface()被禁用。

* /

module.exports = {

exec:function(bridgeSecret,service,action,callbackId,argsJson){

return prompt(argsJson,'gap:'+ JSON.stringify([bridgeSecret,service,action,callbackId]));

},

setNativeToJsBridgeMode:function(bridgeSecret,value){

prompt(value,'gap_bridge_mode:'+ bridgeSecret);

},

retrieveJsMessages:function(bridgeSecret,fromOnlineEvent){

return prompt(+ fromOnlineEvent,'gap_poll:'+ bridgeSecret);

}

};

然后只要在onJsPrompt方法中使用CordovaBridge來(lái)處理js的提示調(diào)用

/ **

*告訴客戶(hù)端向用戶(hù)顯示提示對(duì)話(huà)框。如果客戶(hù)端返回true,則WebView將假定客戶(hù)端將處理提示對(duì)話(huà)框并調(diào)用相應(yīng)的JsPromptResult方法。

* p /

*由于我們出于自己的目的黑客提示,我們不應(yīng)該為此目的使用它們,也許我們應(yīng)該破解console.log來(lái)代替!

* /

@Override

public boolean onJsPrompt(WebView視圖,String origin,String message,String defaultValue,final JsPromptResult result){

//與@JavascriptInterface橋不同,此方法始終在UI線程上調(diào)用。

String processedRet = parentEngine.bridge.promptOnJsPrompt(origin,message,defaultValue);

if(processedRet!= null){

result.confirm(processedRet);

} else {

dialogsHelper.showPrompt(message,defaultValue,new CordovaDialogsHelper.Result(){

@

Override public void gotResult(boolean success,String value){

if(success){

result.confirm(value);

} else {

result.cancel( );

}

}

});

}

return true;

}

Android混合開(kāi)發(fā)是什么東西

混合開(kāi)發(fā)的App(Hybrid App)就是在一個(gè)App中內(nèi)嵌一個(gè)輕量級(jí)的瀏覽器,一部分原生的功能改為Html 5來(lái)開(kāi)發(fā),這部分功能不僅能夠在不升級(jí)App的情況下動(dòng)態(tài)更新,而且可以在Android或iOS的App上同時(shí)運(yùn)行,讓用戶(hù)的體驗(yàn)更好又可以節(jié)省開(kāi)發(fā)的資源。

android h5 混合開(kāi)發(fā)的應(yīng)用軟件有哪些

一、Adobe Edge

目前還處于預(yù)覽階段的Adobe

Edge是用HTML5、CSS、JavaScript開(kāi)發(fā)動(dòng)態(tài)互動(dòng)內(nèi)容的設(shè)計(jì)工具。內(nèi)容可以同時(shí)兼容移動(dòng)設(shè)備和桌面電腦。Edge的一個(gè)重要功能是

Web工具包界面,方便確保頁(yè)面在不同瀏覽器中的架構(gòu)一致性,此外Edge還將整合TypeKit這樣的字體服務(wù)。

動(dòng)畫(huà)和圖形可以添

加到HTML元素中,程序也能通過(guò)Edge自身的代碼片段庫(kù)或者JavaScript代碼進(jìn)行擴(kuò)展。動(dòng)畫(huà)可以在獨(dú)立的時(shí)間線上進(jìn)行嵌套,還能實(shí)現(xiàn)互動(dòng)功

能。符合可以服用并通過(guò)API和代碼片段控制。通過(guò)Edge設(shè)計(jì)的內(nèi)容可以兼容iOS和Android設(shè)備,也可以運(yùn)行在火狐、Chrome、

Safari和IE9等主流瀏覽器。

二、Adobe Dreamweaver CS6

Adobe

Dreamweaver CS6作為一個(gè)Web設(shè)計(jì)軟件,提供了對(duì)HTML網(wǎng)站和移動(dòng)程序的可視化編輯界面。其Fluid

Grid排版系統(tǒng)整合CSS樣式表功能,提供自適應(yīng)版面的跨平臺(tái)兼容性。開(kāi)發(fā)者可以完全實(shí)現(xiàn)Web設(shè)計(jì)的可視化操作,無(wú)需為代碼所困。

用戶(hù)不但還能在Live View中預(yù)覽,還提供多屏幕預(yù)覽功能。開(kāi)發(fā)者可以通過(guò)MultiScreen預(yù)覽面板查看HTML5內(nèi)容的渲染效果。Live View通過(guò)WebKit渲染引擎支持HTML5。

三、Adobe ColdFusion 10

ColdFusion是用來(lái)開(kāi)發(fā)企業(yè)Web程序的服務(wù)器端技術(shù),通過(guò)Websockets、互動(dòng)表單、視頻和地理標(biāo)簽等HTML5技術(shù)創(chuàng)建富媒體用戶(hù)體驗(yàn)。

四、Sencha Architect 2

在開(kāi)發(fā)移動(dòng)和桌面應(yīng)用的工具中,Sencha的定位是HTML5可視化應(yīng)用開(kāi)發(fā)。開(kāi)發(fā)團(tuán)隊(duì)可以在一個(gè)單一集成的環(huán)境中完成應(yīng)用的設(shè)計(jì)、開(kāi)發(fā)和部署。開(kāi)發(fā)者還可以開(kāi)發(fā)Sencha Touch2和Ext JS4 JavaScript應(yīng)用,并實(shí)時(shí)預(yù)覽。

五、Sencha Touch 2

Sencha Touch2是移動(dòng)應(yīng)用框架,也被看作是Sencha的HTML5平臺(tái)。開(kāi)發(fā)者可以用它開(kāi)發(fā)面向iOS、Android和Blackberry、Kindle Fire等多種平臺(tái)的移動(dòng)應(yīng)用。

六、Dojo Foundation Maqetta

來(lái)自于IBM的一個(gè)項(xiàng)目,Dojo Foundation Maqetta是為桌面和移動(dòng)設(shè)備開(kāi)發(fā)HTML5應(yīng)用的開(kāi)源工具,支持在瀏覽器中查看HTML5界面。用戶(hù)體驗(yàn)設(shè)計(jì)師可以通過(guò)拖放組裝UI樣板

七、微軟Visual Studio 2010 ServicePack 1

雖然一開(kāi)始并不支持HTML5,但微軟在2011年三月發(fā)布的Visual Studio 2010 SP1中提供了IntelliSense,追加了針對(duì)HTML5的一些元素。

八、JetBrains WebStorm 4.0

作為擁有HTML編輯器的JavaScript集成開(kāi)發(fā)環(huán)境,WebStorm4.0提供了開(kāi)發(fā)web應(yīng)用的HTML5樣板。開(kāi)發(fā)者可以在創(chuàng)建HTML文檔時(shí)可獲得對(duì)HTML5文件的支持。例如砍伐者鍵入。開(kāi)發(fā)者還可以在chrome瀏覽器中實(shí)時(shí)預(yù)覽HTML文檔。

九、Google Web Toolkit

該開(kāi)發(fā)工具用于開(kāi)發(fā)瀏覽器應(yīng)用,但庫(kù)中支持很多HTML5功能。包括對(duì)客戶(hù)端或web存儲(chǔ)的支持。其他HTML5功能還包括支持Canvas可視化,以及音頻和視頻widget。

十、DCloud HBuilder

HBuilder是當(dāng)前最快的HTML開(kāi)發(fā)工具,強(qiáng)大的代碼助手幫你快速完成開(kāi)發(fā),最全的語(yǔ)法庫(kù)和瀏覽器兼容性數(shù)據(jù)讓瀏覽器碎片化不再頭痛。

android 混合開(kāi)發(fā) 用什么框架好

Cordova是一個(gè)廣泛使用的Hybrid開(kāi)發(fā)框架,它提供了一套js和Native交互規(guī)范

在Cordova的 SystemWebViewEngine 類(lèi)中可以看到

private static void exposeJsInterface(WebView webView, CordovaBridge bridge) {

if ((Build.VERSION.SDK_INT Build.VERSION_CODES.JELLY_BEAN_MR1)) {

Log.i(TAG, "Disabled addJavascriptInterface() bridge since Android version is old.");

// Bug being that Java Strings do not get converted to JS strings automatically.

// This isn't hard to work-around on the JS side, but it's easier to just

// use the prompt bridge instead.

return;

}

webView.addJavascriptInterface(new SystemExposedJsApi(bridge), "_cordovaNative");

}

因此當(dāng)Android系統(tǒng)高于4.2時(shí),Cordova還是使用 addJavascriptInterface 這種方式,因?yàn)檫@個(gè)方法在高版本上安全而且簡(jiǎn)單,低于4.2的時(shí)候,用什么方法呢?

答案是 WebChromeClient.onJsPrompt 方法

WebView可以設(shè)置一個(gè) WebChromeClient 對(duì)象,它可以處理js的3個(gè)方法

onJsAlert

onJsConfirm

onJsPrompt

這3個(gè)方法分別對(duì)應(yīng)js的 alert 、 confirm 、 prompt 方法,因?yàn)橹挥?prompt 接收返回值,所以js調(diào)用一個(gè)Native方法后可以等待Native返回一個(gè)參數(shù)。下面是 cordova.js 中的一段代碼:

/**

* Implements the API of ExposedJsApi.java, but uses prompt() to communicate.

* This is used pre-JellyBean, where addJavascriptInterface() is disabled.

*/

module.exports = {

exec: function(bridgeSecret, service, action, callbackId, argsJson) {

return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));

},

setNativeToJsBridgeMode: function(bridgeSecret, value) {

prompt(value, 'gap_bridge_mode:' + bridgeSecret);

},

retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {

return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);

}

};

然后只要在 onJsPrompt 方法中使用 CordovaBridge 來(lái)處理js的prompt調(diào)用

/**

* Tell the client to display a prompt dialog to the user. If the client returns true, WebView will assume that the client will handle the prompt dialog and call the appropriate JsPromptResult method.

* p/

* Since we are hacking prompts for our own purposes, we should not be using them for this purpose, perhaps we should hack console.log to do this instead!

*/

@Override

public boolean onJsPrompt(WebView view, String origin, String message, String defaultValue, final JsPromptResult result) {

// Unlike the @JavascriptInterface bridge, this method is always called on the UI thread.

String handledRet = parentEngine.bridge.promptOnJsPrompt(origin, message, defaultValue);

if (handledRet != null) {

result.confirm(handledRet);

} else {

dialogsHelper.showPrompt(message, defaultValue, new CordovaDialogsHelper.Result() {

@Override

public void gotResult(boolean success, String value) {

if (success) {

result.confirm(value);

} else {

result.cancel();

}

}

});

}

return true;

}

文章名稱(chēng):android混合開(kāi)發(fā),android混合開(kāi)發(fā)怎么獲取flutter界面的截圖
文章位置:http://aaarwkj.com/article36/dssjgsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站軟件開(kāi)發(fā)、外貿(mào)建站、企業(yè)建站、全網(wǎng)營(yíng)銷(xiāo)推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
蜜臀av午夜福利在线| 清纯唯美校园春色亚洲激情| 欧美精品日韩中文字幕在| 欧美日本黄色一级视频| 国产熟女一区二区精品视频| 国产伦一区二区三区三州| 国产丝袜肉丝在线播放| 欧美日韩国产91在线| 人妻少妇被猛烈进入久久精品| 九九热这里面只有精品| 国产精品五月婷婷六月丁香| 九九热视频在线观看色| 在线免费观看国产不卡| 香蕉网性欧美在线视频| 欧美激情一区二区亚洲专区| 亚洲午夜精品美女写真| 不卡的视频在线观看| 日本在线高清精品人妻| 亚洲欧洲中文字幕一区二区| 亚洲成年人黄色小说网站| 国产精品传媒在线视频| 久久精品欧美日韩视频| 涩涩涩丁香色婷五月网| 麻豆一区二区人妻网站| jk黑丝白丝国产精品| 久草免费人妻视频在线| 97免费在线视频观看| 国产在线精品91系列| 一区二区三区人妻日韩| 特黄特色的日本大片| 日韩人妻一区中文字幕| 亚洲高清中文字幕一区二三区| 国产av爆操黑丝美女| 日本在线一区二区视频麻豆| 国产三级在线播放完整| 亚洲成人久久久av一区| 成年网站在线91九色| 尤物视频精品在线观看| 蜜臀av人妻一区二区三区 | 国产传媒在线视频观看| 欧美日韩国产综合一区二区|