002.實(shí)戰(zhàn)nanoHTTPD嵌入android app(1)

其實(shí)這一篇跟其他人寫的也差不多惊完,所以如果你對(duì)nanoHTTPD了解的話躯保,可以先第二篇開始看飞苇。


想沒想過在自己的android app里內(nèi)嵌一個(gè)http server缎讼,這樣咱們就可以從PC和手機(jī)上的瀏覽器遙控app了收夸。(想想都有點(diǎn)興奮有沒有!)

好血崭,下面咱們就嘗試用nanoHTTPD做個(gè)app端的http server卧惜。

1. nanoHTTPD是啥?為啥用它夹纫?

人家官網(wǎng)上是這么說滴:NanoHTTPD is a light-weight HTTP server designed for embedding in other applications咽瓷。

翻譯成中文就是:專門用來嵌入到app里提供http服務(wù)的。

聽著巨牛是吧舰讹,人家的實(shí)現(xiàn)也很牛茅姜,所有實(shí)現(xiàn)都提供在一個(gè)文件(NanoHTTPD.java)里,真心是nano霸孪弧钻洒!所以不用它,你說用誰锄开?

2. 如何嵌入素标?

  1. 在build.gradle中增加一個(gè)依賴(已經(jīng)懶到一定境界了,能自動(dòng)的萍悴,絕不手動(dòng)下載配置):
compile 'org.nanohttpd:nanohttpd:2.2.0'
  1. 在項(xiàng)目里增加一個(gè)新的package:WebServer头遭;

  2. 在包里增加一個(gè)java文件:MyServer.java

import fi.iki.elonen.NanoHTTPD;

public class MyWebServer extends NanoHTTPD {

  private final static int PORT = 33445;
  private Context _mainContext;

  /*
  主構(gòu)造函數(shù),也用來啟動(dòng)http服務(wù)
  */
  public MyWebServer(Context context) throws IOException {
    super(PORT);
    _mainContext = context;
    start();
    System.out.println("\nRunning! Point your browsers to [http://0.0.0.0:33445/](http://localhost:33445/)\n");
  }

  /*
  解析的主入口函數(shù)癣诱,所有請(qǐng)求從這里進(jìn)计维,也從這里出
  */
  @Override
  public Response serve(IHTTPSession session) {
    String msg = "<html><body><h1>Hello server</h1>\n";
    msg += "<p>We serve " + session.getUri() + " !</p>";
    return newFixedLengthResponse( msg + "</body></html>\n" );
  }
}
  1. 在MainActivity.java中增加兩個(gè)重載函數(shù),用來啟動(dòng)服務(wù)和中止服務(wù):
public class MainActivity extends AppCompatActivity {

  private MyWebServer mywebserver;

  @Override
  public void onResume() {
    super.onResume();

    try {
        mywebserver = new MyWebServer(this);
        Log.e("onResume", "WebServer started");
      } catch (IOException e) {
        e.printStackTrace();
        Log.e("onResume", "WebServer start failed" + e.getMessage());
    }
}

  @Override
  public void onPause() {
    super.onPause();

    if (mywebserver != null) {
        mywebserver.closeAllConnections();
        mywebserver = null;
        Log.e("onPause", "app pause, so web server close");
    }
  }
}
  1. 在AndroidManifest.xml中撕予,增加對(duì)網(wǎng)絡(luò)訪問的權(quán)限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
  1. OK鲫惶,基本的架子搭起來了。

為啥說是只是個(gè)架子嗅蔬,因?yàn)檫@個(gè)時(shí)候你把a(bǔ)pp跑起來以后剑按,雖然可以在瀏覽器里看到網(wǎng)頁了疾就,但實(shí)際開發(fā)起來就會(huì)發(fā)現(xiàn)這個(gè)架子基本不可用。為啥呢艺蝴?因?yàn)檫@里的網(wǎng)頁是用字符串拼接起來的呀猬腰!如果要寫個(gè)稍微復(fù)雜一點(diǎn)的頁面,這種字符串拼接的方法一會(huì)把你累死猜敢,二會(huì)把你累死姑荷,三還是會(huì)把你累死的。

所以呢缩擂,咱們最好讓程序能讀取html鼠冕,js,css文件胯盯,就才具備一點(diǎn)可用性對(duì)不對(duì)懈费?
咱們下一篇文章就開始解決這些問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末博脑,一起剝皮案震驚了整個(gè)濱河市憎乙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叉趣,老刑警劉巖泞边,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疗杉,居然都是意外死亡阵谚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門烟具,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梢什,“玉大人,你說我怎么就攤上這事朝聋∩兀” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵玖翅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我割以,道長(zhǎng)金度,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任严沥,我火速辦了婚禮猜极,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘消玄。我一直安慰自己跟伏,他們只是感情好丢胚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著受扳,像睡著了一般携龟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勘高,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天峡蟋,我揣著相機(jī)與錄音,去河邊找鬼华望。 笑死蕊蝗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赖舟。 我是一名探鬼主播蓬戚,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宾抓!你這毒婦竟也來了子漩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤洞慎,失蹤者是張志新(化名)和其女友劉穎痛单,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劲腿,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旭绒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焦人。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挥吵。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖花椭,靈堂內(nèi)的尸體忽然破棺而出忽匈,到底是詐尸還是另有隱情,我是刑警寧澤矿辽,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布丹允,位于F島的核電站,受9級(jí)特大地震影響袋倔,放射性物質(zhì)發(fā)生泄漏雕蔽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一宾娜、第九天 我趴在偏房一處隱蔽的房頂上張望批狐。 院中可真熱鬧,春花似錦前塔、人聲如沸嚣艇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽食零。三九已至困乒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慌洪,已是汗流浹背顶燕。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冈爹,地道東北人涌攻。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像频伤,于是被迫代替她去往敵國(guó)和親恳谎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348