日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Day 10: PhoneGap —— 开发手机应用如此简单

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Day 10: PhoneGap —— 开发手机应用如此简单 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天又是“30天學習30種新技術”的一天。長期以來,我覺得手機開發很恐怖,大部分應用都沒有商業模式。事實上,編寫手機應用從來都不能讓我興奮。然而,考慮到手機領域的飛速發展,以及更多的人通過手機而不是桌面訪問互聯網,我決定嘗試下手機開發。我的手機開發之旅將從PhoneGap 起步。

本文首先介紹 PhoneGap 的基本情況,接著我們使用 PhoneGap 開發一個手機應用。

手機應用

我們將為是“30天學習30種新技術”開發一個手機閱讀器。用戶可以將該應用安裝在Android、Symbian、webOS或Windows設備上。該手機應用可以在 https://build.phonegap.com/apps/635001/share 下載。

這個應用可以做到:

給出所有已經發布的系列文章的列表。用戶點擊列表中的條目則調用瀏覽器打開鏈接。

讀者可以使用該應用回饋想法。

什么是 PhoneGap?

PhoneGap是一個自由開源的手機開發框架,可以使用標準的 web 技術,即 HTML,CSS 和 JavaScript 進行手機應用開發。

它將應用的web資源封裝在原生應用中,這些應用可以提交到各大應用商店。更重要的是,我們可以通過 PhoneGap 進行跨平臺的手機應用開發。這意味著,在理想情況下,我們只需編寫一次手機應用,就可以將該應用移植到多個平臺。例如,我為Android設備編寫了這個應用,然而使用 PhoneGap build,我同時為其他設備打包了應用。大多數標準的設備特性,例如照相、地理位置、存儲等都由JavaScript API提供了。取決與目標設備,PhoneGap提供的JavaScript API會有所不同。

關于 PhoneGap 的一些事實:

  • 2009年,Nitobi開發了PhoneGap框架。
  • 2011年10月,Adobe 購買了 Nitobi(PhoneGap)背后的公司。
  • Adobe 將 PhoneGap 貢獻給 Apache 基金會。
  • 此開源項目被命名為 Apache Cordova.
  • PhoneGap 是 Adobe 完成的 開源項目 Apache Cordova 的實現。 PhoneGap的核心使用 Apache Cordova.
  • PhoneGap使用基于插件的架構。所有設備的特性以插件方式提供。本文中,我們將使用一些插件。
  • 為什么我關心PhoneGap?

  • 沒有必要為每個平臺學習一種原生的開發環境。如果開發者打算針對多個平臺,那么PhoneGap的跨平臺特性可以節約開發者大量的時間和精力。我了解HTML、CSS和JavaScript,可以很平滑地進入手機世界。

  • 對于開發基于REST API的CRUD手機應用,PhoneGap很好用。

  • 它不強迫開發者選擇特定的CSS庫。開發者可以使用任何他們喜歡的移動端的庫。本應用中我使用jQuery mobile。

  • PhoneGap Prerequisites

    PhoneGap依賴NodeJS,我們需要使用npm來安裝PhoneGap。Npm是NodeJS的包管理器,新版的NodeJS自帶npm。你可以從官網下載最新版的NodeJS。

    你需要同時安裝目標機器的SDK。例如,如果我們創建Android程序,我們需要在操作系統上安裝 Android 開發者工具。PhoneGap 使用 SDK 為目標平臺構建包。

    PhoneGap起步

    使用如下命令安裝PhoneGap:

    sudo npm install -g phonegap

    以上命令將全局安裝 phonegap 包,這樣任何目錄下都可以使用 phonegap。

    安裝插件需要安裝Cordova.

    使用如下命令安裝Cordova。

    sudo npm install -g cordova

    GitHub 倉庫

    今天的demo應用的代碼在github上。

    創建PhoneGap應用

    phonegap命令行提供了使用模板創建新phonegap項目的命令:

    phonegap create reader --id io.reader --name Reader30

    上面的命令會創建一個reader目錄。

    io.reader和Reader30是可選的:io.reader提供了一個類似反域名的識別符,而Reader30提供了應用的顯示文本。

    應用的文件結構如下:

    讓我們看下這些生成的目錄:

  • merges文件夾存放專門針對某個特定平臺的資源。例如,我們可能使用merges來為Android設備改變字體大小。
  • platforms目錄存放平臺構建文件。
  • plugins存放應用使用的插件。當我們安裝一個插件的時候,插件會被存放在這個目錄下。
  • www目錄存放應用資源,例如html、css、js和img。這是我們要花最多時間的目錄。config.xml包含了生成和分發應用所需的元信息。元信息也包括應用名稱、描述、作者詳情、應用權限等信息。在這里可以看到一個完整的列表。
  • 運行下列命令即可在android上運行應用:

    phonegap run android

    這是我們的android平臺閱讀器應用的第一次構建。如果有真實設備連接,應用會跑在真實設備上。如果沒有設備,會啟動Android虛擬器,應用會被部署到虛擬器上。

    注意:Android虛擬器的性能相當差勁,所以我建議你總是連接上你的真實手機設備。Grant Shipley的博客提供了一些加速Android虛擬器的信息。

    開發手機應用

    如上所述,我們的應用有兩個頁面。我們先開發第一個。

    博客列表

    初始頁面列出所有已發布文章的列表。我們修改下index.html,請從我的github倉庫中復制css和javascript資源。

    <!DOCTYPE html> <html> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><title>Learn 30 technologies in 30 days</title><link rel="stylesheet" href="css/vendor/jquery.mobile-1.3.1.min.css"> <link rel="stylesheet" href="css/vendor/jquery.loadmask.css"></head> <body><div data-role="page" id="mainPage"><div data-role="header" data-position="fixed"><h1>30Technologies30Days</h1><a href="#feeback" data-icon="edit" data-theme="b" class="feedback ui-btn-right" data-role="button" data-inline="true" data-ajax="false">Feedback</a><div data-role="navbar"><ul><li><a href="#home" class="home ui-btn-active" data-icon="home">Home</a></li></ul></div></div><div id="main" data-role="content"></div><div data-theme="a" data-role="footer"><h3>? Shekhar Gulati 2013</h3></div> </div><script type="text/x-mustache-template" id="home-template"><ul id="blogs" data-role="listview" data-filter="true" data-filter-placeholder="Search blogs..." data-inset="true"></ul> </script><script type="text/x-mustache-template" id="blog-template"> <li><a href="{{url}}" target="_blank"><h3>{{title}}</h3><p><strong>{{publishedOn}}</strong></p></li> </script><script src="phonegap.js"></script> <script src="js/vendor/jquery-1.9.1.min.js"></script> <script src="js/vendor/jquery.mobile-1.3.1.min.js"></script> <script src="js/vendor/jquery.ui.map.js"></script> <script src="js/vendor/jquery.loadmask.min.js"></script> <script src="js/vendor/jquery.timeago.js"></script> <script type="text/javascript" src="js/vendor/mustache.js"></script> <script type="text/javascript" src="js/app.js"></script> </body> </html>

    上面的html導入了所需的css和javascript文件。它使用jQuery mobile達到原生效果。我們同時定義了一個mustache模板來呈現列表。

    應用相關的javascript代碼放在 app.js文件中:

    $(document).ready(function(){homeView();$('.home').on('tap', renderHomeView); $('.feedback').on('tap', renderFeedbackFormView); });function renderHomeView(event){event.preventDefault();homeView(); }function homeView(){$('#main').empty();$('.home').addClass("ui-btn-active");$('#main').html(template("home"));var url = 'http://30technologiesin30days-t20.rhcloud.com/api/v1/blogs';$.mobile.loading( 'show',{});$.ajax({url : url,dataType : 'json',success : function(data){$.mobile.loading( 'hide',{});$.each(data , function(i , obj){var template = $("#blog-template").html();obj.publishedOn = $.timeago(obj.publishedOn);$("#blogs").append(Mustache.to_html(template,obj));$('#blogs').listview('refresh');});},error : function(XMLHttpRequest,textStatus, errorThrown) { $.mobile.loading( 'hide',{text:"Fetching blogs.."}); alert("Something wrong happended on the server. Try again.."); }})$('#main').trigger('create');}function template(name) {return Mustache.compile($('#'+name+'-template').html()); }function showNotification(message , title){if (navigator.notification) {navigator.notification.alert(message, null, title, 'OK');} else {alert(title ? (title + ": " + message) : message);} }

    上面的app.js做了這些事:

  • 綁定了文檔的就緒事件。一旦就緒,將渲染初始頁面。

  • 初始頁面進行REST調用以獲取所有博客。我們使用jQuery來調用REST。

  • 接受信息后,我們創建一個列表。最后刷新下。

  • 允許訪問REST服務

    PhoneGap默認不允許應用訪問遠程資源。這就意味著應用無法進行REST調用。為了允許應用進行REST調用,我們需要允許它訪問。我們可以通過通配符*允許應用訪問一切資源。請參閱文檔了解更多信息。

    在config.xml下修改訪問控制信息:

    <access origin="*" />

    安裝插件

    應用使用一些插件來訪問特定設備的特性。

    cordova plugin add org.apache.cordova.geolocation cordova plugin add org.apache.cordova.dialogs
  • 第一個命令安裝了geolocation插件。Geolocation提供了設備位置的信息,例如經度和緯度。我們稍后將使用此特性。參閱文檔 了解更多信息。

  • 第二個命令安裝了dialogs插件。dialogs插件提供了原生的設備視覺提醒。參閱文檔了解更多信息。

  • 反饋提交表單

    第二個屏幕允許用戶提交反饋。

    我們增加了一個反饋表單,來記錄用戶的反饋。

    <script type="text/x-mustache-template" id="feedback-form-template"><form action="" id="feedbackForm"><div data-role="fieldcontain"><label for="name">Describe</label><input type="text" name="name" id="name" placeholder="Full Name eg. Shekhar Gulati "></div><div data-role="fieldcontain"><label for="description">Describe</label><textarea name="description" id="description" placeholder="Message for author.."></textarea></div><div id="checkboxes1" data-role="fieldcontain"><fieldset data-role="controlgroup" data-type="vertical"><legend>Share my location</legend><input id="sharemylocation" name="sharemylocation" type="checkbox" value="true"><label for="sharemylocation">Share</label></fieldset></div><button id="create-button" data-inline="true">Feedback</button></form> </script>

    修改app.js文件,監聽tap事件。

    $(document).ready(function(){homeView();$('.home').on('tap', renderHomeView); $('.feedback').on('tap', renderFeedbackFormView); });function renderFeedbackFormView(event){event.preventDefault();$('#main').empty();$('#main').html(template("feedback-form"));$('#main').trigger('create');$('#create-button').bind('tap',shareFeedback); }function shareFeedback(event){event.preventDefault();$('#feedbackForm').mask(); var name = $('#name').val();var description = $('textarea#description').val();var sharemylocation = $("#sharemylocation:checked").val() === undefined ? "false" : "true";var data = {name:name , description:description , lngLat :[]};if(sharemylocation === "true"){navigator.geolocation.getCurrentPosition(function(position){var lngLat = [position.coords.longitude , position.coords.latitude];data.lngLat = lngLat;postFeedback(data);} , function(error){alert('code: ' + error.code + '\n' +'message: ' + error.message + '\n');$('#feedbackForm').unmask(); });}else{postFeedback(data);}}function postFeedback(data){$.ajax({type : 'POST',url : 'http://30technologiesin30days-t20.rhcloud.com/api/v1/feedback',crossDomain : true,data : JSON.stringify(data),dataType : 'json',contentType: "application/json",success : function(data){$('#feedbackForm').unmask();$('#feedbackForm')[0].reset();showNotification('Received your feedback', 'Info');homeView();},error : function(XMLHttpRequest,textStatus, errorThrown) { $('#feedbackForm').unmask();alert("Error status :"+textStatus); alert("Error type :"+errorThrown); }}); }

    當反饋表單提交后,我們從表單獲取了數據。如果用戶勾選了“分享我的位置”,我們會使用geolocation插件來獲取用戶的位置。最后,我們將POST請求提交到我們的REST服務。一旦成功提交,我們顯示一個提醒。

    運行應用

    現在我們可以在設備上安裝和運行應用了。使用如下命令:

    phonegap run android

    今天就到這里了。多多回饋。


    原文 Day 10: PhoneGap--Mobile Development for the Dummies
    翻譯 SegmentFault

    總結

    以上是生活随笔為你收集整理的Day 10: PhoneGap —— 开发手机应用如此简单的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: www.啪啪.com | 天堂网av中文字幕 | 一区二区三区观看 | 老司机一区 | 午夜精品剧场 | 五月天激情国产综合婷婷婷 | 国产高潮av| 91狠狠干| eeuss鲁丝片一区二区三区 | 爱爱的免费视频 | 日本视频网站在线观看 | 女18毛片| 亚洲淫 | 一区在线观看 | 玉蒲团在线 | 亚洲天堂av电影 | 久久久久久久人妻无码中文字幕爆 | 欧美无玛| 精品伊人久久 | 毛片一级片 | 三级亚洲 | 日韩少妇一区二区三区 | 日韩一级片网站 | 在线观看亚洲大片短视频 | 久久免费福利视频 | 亚洲精品视频观看 | 亚洲欧美日韩精品久久亚洲区 | 污网站免费在线 | 亚洲成人免费视频 | www.四虎com | 欧美一级网 | 国语对白做受69按摩 | 免费成人黄 | 福利二区三区 | 日韩最新网址 | 肉色丝袜小早川怜子av | 青青在线精品 | 桃色综合网 | 久久韩日 | 亚洲av无码一区二区乱子伦 | 国产精品美女一区 | 99av国产精品欲麻豆 | 欧美欧美欧美 | 亚洲va韩国va欧美va精品 | 7777奇米影视 | 国产999精品视频 | 中文字幕一区二区三区免费视频 | 午夜网站在线观看 | 午夜一区在线观看 | 国产自偷自拍视频 | 不卡日韩 | 一区二区国产视频 | 免费精品一区二区 | 人人爱超碰 | 色屁屁www影院免费观看入口 | 麻豆系列| 公车激情云雨小说 | 色插综合 | 欧美肉大捧一进一出免费视频 | 日本欧美不卡 | 五月亚洲 | 欧美黄色大片网站 | 视频在线播 | 精品美女在线 | 国产亚洲一区二区在线 | 波多在线播放 | 日韩在线观看视频网站 | 日韩在线视频免费播放 | 91玉足脚交白嫩脚丫 | 动漫精品一区二区三区 | 亚洲视频在线免费观看 | 亚洲欧美一级 | 亚洲av无码乱码在线观看富二代 | 成年人免费在线视频 | 亚洲伦理精品 | 午夜亚洲aⅴ无码高潮片苍井空 | 男生操女生屁股 | 欧洲成人午夜精品无码区久久 | 依依av| 中文无码日韩欧 | 欧洲天堂网| 欧美久草视频 | 日本精品不卡 | a视频在线播放 | 中文字幕一区二区三区波野结 | 色哟哟欧美精品 | 女人叫床很黄很污句子 | 亚洲区视频在线观看 | 亚洲视频123 | 人人干人人爽 | 性大片潘金莲裸体 | 最新国产三级 | 999久久久久久久久6666 | 一区二区三区日韩精品 | 婷婷在线综合 | 天天夜夜人人 | caoporen在线 | 理论片毛片 | 草草福利视频 |