Android 近距離通訊技術(NFC)
NFC簡介
NFC(Near Field Communication)近距離通訊技術
NFC允許在NFC標籤和Android裝置之間或兩個Android裝置之間共享小的資料的負載。
NFC標籤
NFC標籤具有複雜的分類。簡單的NFC標籤只提供讀寫語法,某些時候一次只能以只讀的方式讀取卡片的可程式設計區域。複雜一點的NFC標籤提供了數學運算能力,而且有加密的硬體來認證對一個扇區的訪問。最複雜的NFC標籤包含了運算環境,允許在標籤上執行復雜的互動程式碼。儲存在標籤中的資料也可以用各種格式來編寫,但是大多數的Android框架API都使用基於NDEF(NFC Data Exchange Format)的標準。
NDEF資料和Android工作的場景
1. 從NFC標籤中讀取NDEF資料;
從NFC標籤中讀取NDEF資料是用標籤排程系統來處理的,它會分析被發現的NFC標籤,對資料進行適當的分類,並啟動對該類資料感興趣的應用程式。想要處理被掃描到NFC標籤的應用程式會宣告一個Intent過濾器,並請求處理資料。
2. 把NDEF訊息從一個裝置傳送給另一個裝置。
Android Beam™ 功能允許裝置把一個NDEF訊息推送到物理上相互監聽的另一個裝置上。這種互動提供了比其他無線技術(如藍芽)更容易的傳送資料的方法。因為NFC不需要手動的裝置發現或配對要求。兩個裝置在接近到一定範圍時會自動的連線。Android Beam通過一組NFC API來使用,以便應用程式能夠在裝置之間來傳輸資訊。例如,通訊錄、瀏覽器以及YouTube等應用程式都使用Android Beam來跟其他裝置共享通訊錄、網頁和視訊。
NFC標籤排程系統
通常,除非是在裝置的設定選單中NFC被禁用,否則Android裝置會在非鎖屏的狀態下搜尋NFC。當Android裝置發現NFC標籤時,期望的行為是用最合適的Activity來處理該Intent,而不是詢問使用者使用什麼應用程式。因為裝置只能在很短的範圍內掃描到NFC標籤,強制的讓使用者手動的選擇一個Activity,會導致裝置離開NFC標籤,從而中斷該連線。你應該開發你自己的Activity來處理你所關心的NFC標籤,從而阻止 選擇器的操作。
為了幫助你達到這個目標,Android提供了特殊的標籤排程系統,來分析掃描到的NFC標籤,通過解析資料,在被掃描到的資料中嘗試找到感興趣的應用程式,具體做法如下:
1. 解析NFC標籤並搞清楚標籤中標識資料負載的MIME型別或URI;
2. 把MIME型別或URI以及資料負載封裝到一個Intent中。
3. 基於Intent來啟動Activity
NFC標籤對映到MIM型別和URI
開始編寫NFC應用程式之前,重要的是要理解不同型別的NFC標籤、標籤排程系統是如何解析NFC標籤的、以及在檢測到NDEF訊息時,標籤排程系統所做的特定的工作等。NFC標籤涉及到廣泛的技術,並且有很多不同的方法向標籤中寫入資料。Android支援由NFC Forum所定義的NDEF標準。
NDEF資料被封裝在一個訊息(NdefMessage)中,該訊息中包含了一條或多條記錄(NdefRecord)。每個NDEF記錄必須具有良好的你想要建立的記錄型別的規範的格式。Android也支援其他的不包含NDEF資料型別的標籤,你能夠使用android.nfc.tech包中的類來工作。要使用其他型別標籤來工作,涉及到編寫自己的跟該標籤通訊的協議棧,因此我們建議你儘可能的使用NDEF,以便減少開發難度,並且最大化的支援Android裝置。
注意:要下載完整的NDEF規範,請去“NFC論壇規範下載”網址來下載。
現在,你已經具備了一些NFC標籤的背景知識,接下來要詳細的介紹Android是如何處理NDEF格式的標籤的。當Android裝置掃描到包含NDEF格式資料的NFC標籤時,它會解析該訊息,並嘗試搞清楚資料的MIME型別或URI標識。首先系統會讀取訊息(NdefMessage)中的第一條NdefRecord,來判斷如何解釋整個NDEF訊息(一個NDEF訊息能夠有多條NDEF記錄)
3-bit TNF(型別名稱格式):指示如何解釋可變長度型別欄位,表1中介紹有效值
可變長度型別:說明記錄的型別,如果使用TNF_WELL_KNOWN,那麼則使用這個欄位來指定記錄的型別定義(RTD)。在下表2中定義了有效的RTD值。
可變長度ID:唯一標識該記錄。這個欄位不經常使用,但是,如果需要唯一的標識一個標記,那麼就可以為該欄位建立一個ID。
你想讀/寫的實際的資料負載。一個NDEF訊息能夠包含多個NDEF記錄,因此不要以為在NDEF訊息的第一條NDEF記錄中包含了所有的負載。
標籤排程系統使用TNF和型別欄位來嘗試把MIME型別或URI對映到NDEF訊息中。如果成功,它會把資訊跟實際的負載一起封裝到ACTION_NEDF_DISCOVERED型別的Intent中。但是,會有標籤排程系統不能根據第一條NDEF記錄來判斷資料型別的情況,這樣就會有NDEF資料不能被對映到MIME型別或URI,或者是NFC標籤沒有包含NDEF開始資料的情況發生。在這種情況下,就會用一個標籤技術資訊相關的Tag物件和封裝在ACTION_TECH_DISCOVERED型別Intent物件內部的負載來代替。
表1.介紹標籤排程系統對映如何把TNF和型別欄位對映到MIME型或URI上。同時也介紹了那種型別的TNF不能被對映到MIME型別或URI上。這種情況下,標籤排程系統會退化到ACTION_TECH_DISCOVERED型別的Intent物件。
例如,如果標籤排程系統遇到一個TNF_ABSOLUTE_URI型別的記錄,它會把這個記錄的可變長度型別欄位對映到一個URI中。標籤排程系統會把這個URI跟其他相關的標籤的資訊(如資料負載)一起封裝到ACTION_NDEF_DISCOVERED的Intent物件中。在另一方面,如果遇到了TNF_UNKNOWN型別,它會建立一個封裝了標籤技術資訊的Intent物件來代替。
表1.所支援的TNF和它們的對映
表2.TNF_WELL_KNOWN所支援的RTD和它們的對映
應用排程NFC標籤
當標籤排程系統完成對NFC標籤和它的標識資訊封裝的Intent物件的建立時,它會把該Intent物件傳送給感興趣的應用程式。如果有多個應用程式能夠處理該Intent物件,就會顯示Activity選擇器,讓使用者選擇Activity。標籤排程系統定義了三種Intent物件,以下按照由高到低的優先順序列出這三種Intent物件:
1. ACTION_NDEF_DISCOVERED:這種Intent用於啟動包含NDEF負載和已知型別的標籤的Activity。這是最高優先順序的Intent,並且標籤排程系統在任何其他Intent之前,都會盡可能的嘗試使用這種型別的Intent來啟動Activity。
2. ACTION_TECH_DISCOVERED:如果沒有註冊處理ACTION_NDEF_DISCOVERED型別的Intent的Activity,那麼標籤排程系統會嘗試使用這種型別的Intent來啟動應用程式。如果被掃描到的標籤包含了不能被對映到MIME型別或URI的NDEF資料,或者沒有包含NDEF資料,但是是已知的標籤技術,那麼也會直接啟動這種型別的Intent物件(而不是先啟動ACTION_NDEF_DISCOVERED型別的Intent)
3. ACTION_TAB_DISCOVERED:如果沒有處理ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED型別Intent的Activity,就會啟動這種型別的Intent。
標籤排程系統的基本工作方法如下:
1. 用解析NFC標籤時由標籤排程系統建立的Intent物件(ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED)來嘗試啟動Activity;
2. 如果沒有對應的處理Intent的Activity,那麼就會嘗試使用下一個優先順序的Intent(ACTION_TECH_DISCOVERED或ACTION_TAG_DISCOVERED)來啟動Activity,直到有對應的應用程式來處理這個Intent,或者是直到標籤排程系統嘗試了所有可能的Intent。
3. 如果沒有應用程式來處理任何型別的Intent,那麼就不做任何事情。
在可能的情況下,都會使用NDEF訊息和ACTION_NDEF_DISCOVERED型別的Intent來工作,因為它是這三種Intent中最標準的。這種Intent與其他兩種Intent相比,它會允許你在更加合適的時機來啟動你的應用程式,從而給使用者帶來更好的體驗。
在Android的Manifest中申請NFC訪問
在訪問裝置的NFC硬體和正確的處理NFC的Intent之前,要在AndroidManifest.xml檔案中進行以下宣告:
1. 在<uses-permission>元素中宣告訪問NFC硬體:
<uses-permission android:name="android.permission.NFC" />
2. 你的應用程式所支援的最小的SDK版本。API Level 9只通過ACTION_TAG_DISCOVERED來支援有限的標籤排程,並且只能通過EXTRA_NDEF_MESSAGES來訪問NDEF訊息。沒有其他的標籤屬性或I/O操作可用。API Level 10中包含了廣泛的讀寫支援,從而更好的推動了NDEF的應用前景,並且API Leve 14用Android Beam和額外的方便的建立NDEF記錄的方法,向外提供了更容易的把NDEF訊息推送給其他裝置的方法。
<uses-sdkandroid:minSdkVersion="10"/>
3. 使用uses-feature元素,在Google Play中,以便你的應用程式能夠只針對有NFC硬體的裝置來顯示。
<uses-featureandroid:name="android.hardware.nfc"android:required="true"/>
如果你的應用程式使用了NFC功能,但是相關的功能又不是你的應用程式的關鍵功能,你可以忽略uses-feature元素,並且要在執行時通過呼叫getDefaultAdapter()方法來檢查NFC是否有效。
過濾NFC的Intent
要在你想要處理被掃描到的NFC標籤時啟動你的應用程式,可以在你的應用程式的Android清單中針對一種、兩種或全部三種類型的NFC的Intent來過濾。但是,通常想要在應用程式啟動時控制最常用的ACTION_NDEF_DISCOVERED型別的Intent。在沒有過濾ACTION_NDEF_DISCOVERED型別的Intent的應用程式,或資料負載不是NDEF時,才會從ACTION_NDEF_DISCOVERED型別的Intent回退到ACTION_TECH_DISCOVERED型別的Intent。通常ACTION_TAB_DISCOVERED是最一般化的過濾分類。很多應用程式都會在過濾ACTION_TAG_DISCOVERED之前,過濾ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED,這樣就會降低你的應用程式被啟動的可能性。ACTION_TAG_DISCOVERED只是在沒有應用程式處理ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED型別的Intent的情況下,才使用的最後手段。
因為NFC標籤的多樣性,並且很多時候不在你的控制之下,因此在必要的時候你要回退到其他兩種型別的Intent。在你能夠控制標籤的型別和寫入的資料時,我們建議你使用NDEF格式。下文將介紹如何過濾每種型別的Intent物件。
ACTION_NDEF_DISCOVERED
要過濾ACTION_NDEF_DISCOVERED型別的Intent,就要在清單中跟你想要過濾的資料一起來宣告該型別的Intent過濾器。以下是過濾text/plain型別的MIME的ACTION_NDEF_DISCOVERED型別過濾器的宣告:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />
</intent-filter>
以下示例使用http://developer.android.com/index.html格式的URI來過濾:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"
android:host="developer.android.com"
android:pathPrefix="/index.html" />
</intent-filter>
ACTION_TECH_DISCOVERED
如果你的Activity要過濾ACTION_TECH_DISCOVERED型別的Intent,你必須建立一個XML資原始檔,該檔案在tech-list集合中指定你的Activity所支援的技術。如果tech-list集合是標籤所支援的技術的一個子集,那麼你的Activity被認為是匹配的。通過呼叫getTechList()方法來獲得標籤所支援的技術集合。
例如,如果掃描到的標籤支援MifareClassic、NdefFormatable和NfcA,那麼為了跟它們匹配,tech-list集合就必須指定所有這三種技術,或者指定其中的兩種或一種。
以下示例定義了所有的相關的技術。你可以根據需要刪除其中一些設定。然後把這個檔案儲存到<project-root>/res/xml資料夾中(你能夠把命名為任何你希望的名字):
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.NfcB</tech>
<tech>android.nfc.tech.NfcF</tech>
<tech>android.nfc.tech.NfcV</tech>
<tech>android.nfc.tech.Ndef</tech>
<tech>android.nfc.tech.NdefFormatable</tech>
<tech>android.nfc.tech.MifareClassic</tech>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
</resources>
你也能夠指定多個tech-list集合,每個tech-list集合被認為是獨立的,並且如果任何一個tech-list集合是由getTechList()返回的技術的子集,那麼你的Activity就被認為是匹配的。下列示例能夠跟支援NfcA和Ndef技術NFC標籤或者跟支援NfcB和Ndef技術的標籤相匹配:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.Ndef</tech>
</tech-list>
</resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.NfcB</tech>
<tech>android.nfc.tech.Ndef</tech>
</tech-list>
</resources>
在你的AndroidManifest.xml檔案中,要像向下列示例那樣,在<activity>元素內的<meta-data>元素中指定你建立的資原始檔:
<activity>
...
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
...
</activity>
ACTION_TAG_DISCOVERED
使用下列Intent過濾器來過濾ACTION_TAG_DISCOVERED型別的Intent:
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
從Intent中獲取資訊
如果因為NFC的Intent而啟動一個Activity,那麼你就能夠從Intent中獲取被掃描到的NFC標籤的相關資訊。根據被掃描到的標籤,Intent物件能夠以下額外的資訊:
1. EXTRA_TAG(必須的):它是一個代表了被掃描到的標籤的Tag物件;
2. EXTRA_NDEF_MESSAGES(可選):它是一個解析來自標籤中的NDEF訊息的陣列。這個附加資訊是強制在Intent物件上的;
3. {@link android.nfc.NfcAdapter#EXTRA_ID(可選):標籤的低階ID。
要獲取這些附加資訊,就要確保你的Activity是被掃描到的NFC的Intent物件啟動的,然後才能獲得Intent之外的附加資訊。下例檢查ACTION_NDEF_DISCOVERED型別的Intent,並從Intent物件的附加資訊中獲取NDEF訊息。
public void onResume() {
super.onResume();
...
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
}
}
//process the msgs array
}
此外,你還能夠從Intent物件中獲得一個Tag物件,該物件包含了資料負載,並允許你列舉標籤的技術:
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
建立通用的NDEF記錄型別
本節介紹如何建立通用的NDEF記錄型別,以便幫助你向NFC標籤寫入或用Android Beam傳送資料。從Android4.0(API Level14)開始,可以用createUri()方法來幫助你自動的建立URI記錄。從Android4.1(API Level 16)開始,可以用createExternal()和createMime()方法來幫助你建立MIME和外部型別的NDEF記錄。使用這些輔助方法會盡可能的避免手動建立NDEF記錄的錯誤。
本節還要介紹如何建立NDEF記錄對應的Intent過濾器。所有的這些寫入或傳送到NFC標籤的NDEF記錄例子都應該是NDEF訊息的第一條記錄。
TNF_ABSOLUTE_URI
注意:我們推薦你使用RTD_URI型別,而不是TNF_ABSOLUTE_URI,因為它更高效。
用下列方法建立一個TNF_ABSOLUTE_URI型別的NDEF記錄:
NdefRecord uriRecord = new NdefRecord(
NdefRecord.TNF_ABSOLUTE_URI ,
"http://developer.android.com/index.html".getBytes(Charset.forName("US-ASCII")),
new byte[0], new byte[0]);
對應的Intent過濾器如下:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http"
android:host="developer.android.com"
android:pathPrefix="/index.html" />
</intent-filter>
TNF_MIME_MEDIA
使用下列方法建立TNF_MIME_MEDIA型別的NDEF記錄。
使用createMime()方法:
NdefRecord mimeRecord = NdefRecord.createMime("application/vnd.com.example.android.beam",
"Beam me up, Android".getBytes(Charset.forName("US-ASCII")));
手動的建立NdefRecord:
NdefRecord mimeRecord = new NdefRecord(
NdefRecord.TNF_MIME_MEDIA ,
"application/vnd.com.example.android.beam".getBytes(Charset.forName("US-ASCII")),
new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));
對應的Intent過濾器如下:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/vnd.com.example.android.beam" />
</intent-filter>
TNF_WELL_KNOWN和RTD_TEXT
用下列方法建立TNF_WELL_KNOWN型別的NDEF記錄:
相關推薦
Android 近距離通訊技術(NFC)
NFC簡介 NFC(Near Field Communication)近距離通訊技術 NFC允許在NFC標籤和Android裝置之間或兩個Android裝置之間共享小的資料的負載。 NFC標籤 NFC標籤具有複雜的分類。簡單的NFC標籤只提供讀寫
近場通訊技術(NFC)的發展及其用途
近場通訊(Near Field Communication,縮寫為NFC)在今年已經成為移動領域的一個熱門詞彙,但很多人還不知道它的含義或者僅僅對它有一個模糊的概念。有些人則僅僅把它與移動支付和移動錢包方案等同視之,認為近場通訊僅僅是在銷售終端用手機購物。 而近場通訊,正如
Android學習筆記之NFC近距離無線通訊技術(Dean)
首先要弄清楚NFC是什麼? NFC是Near Field Communication縮寫,即近距離無線通訊技術。由飛利浦公司和索尼公司共同開發的NFC是一種非接觸式識別和互聯技術,可以在移動裝置、消費類電子產品、PC 和智慧控制元件工具間進行近距離無線通訊。NFC 提供了一種簡單、觸控式的解決方案,可以
Android中基於HTTP的通訊技術(3)使用HttpClient進行Get方式通訊
繼續搬磚學習android通訊(來自極客學院) 使用HttpClient進行Get方式通訊,通過HttpClient建立網路連結,使用HttpGet方法讀取資料,並且通過Response獲取Entity返回值。package com.example.httpclientge
Android中基於HTTP的通訊技術(5)Google開源庫 使用 Volley 實現 JSON 字串請求
使用 Volley 實現 JSON 字串請求,通過極少的程式碼以及更方便理解的引數完成通訊。 (來自極客學院的學習筆記,我是搬運工- -) Volley是谷歌開發android平臺的網路通訊庫:更
Android NDK網路通訊篇(五)之本地通訊篇
Android NDK網路通訊篇(五) 本地通訊篇 前言 在同一個裝置或者同一個APP裡面,我們可以通過LocalSocket來實現本地通訊,比如可以用Java程式碼實現一個本地通訊的C/S架構的程式,也可以用Java程式碼實現客戶端程式碼,用原生程式碼實現服務端程式碼,本
android程序間通訊Binder(一)
最近在看程序間通訊方面的東西,在這裡粗略的的記錄一下自己看到的東西。 在android中實現程序間通訊用的都是Binder機制,Binder:貼上劑,個人感覺很形象,將各個程序貼上起來,實現程序之間資料的互動,拒絕了程序間的老死不相往來。本來程序就是互斥的,為的就是保持程序
Android硬體之NCF技術(近場通訊技術)
Android硬體之NFC技術 NFC(Near Field Communication,近場通訊),是一種資料傳輸技術。但是,與Wi-Fi、藍芽、紅外線等技術最主要的差異就是有效距離,NFC的
【金陽光測試】基於控件核心技術探討---Android自己主動化系列(2)---2013年5月
進程 實用 版本 信號 監聽 dialog otto 設計 核心技術 第一講分享了下安卓自己主動化一些概況和一些自己主動化框架現狀和技術可以解決什麽樣的問題。這次課就深入到android世界裏面。遨遊、翺翔。深入了解自己主動化測試核心技術。
Android Native Hook技術(一)
數組 chef protect 獲取 通過 防止 example tile ofo 原理分析 ADBI是一個著名的安卓平臺hook框架,基於 動態庫註入 與 inline hook 技術實現。該框架主要由2個模塊構成:1)hijack負責將so註入到目標進程空間,2)lib
Android 地址空間隨機化(ALSR)緩解技術
出發點 常規的緩衝區溢位利用技術以及其衍生的Ret2libs和ROP利用技術在利用棧緩衝區溢位漏洞進行攻擊時,需要事先熟悉被攻擊程序的虛擬地址空間佈局以便採用硬編碼方式佈局棧記憶體。由於作業系統每次載入程序和動態連結庫時,基地址都載入到固定虛擬記憶體地址處,使緩衝區溢位漏洞
Android安全/開發基礎--6--程序間通訊機制(IPC)
6-1、多程序 1、多程序分為兩種: 第一種情況是一個應用因為某些原因自身需要採用多執行緒模式來實現。 另一種情況是當前應用需要向其他應用獲取資料。 2、Android中的多程序模式: 通過給四大元件指定android:process屬性,可以開啟多程序模式,使
計算機網路資料通訊交換技術(二)
在多個站點間,要引用資料通訊交換技術才能實現資訊的有效傳遞。計算機網路資料通訊交換技術主要有:電路交換技術;報文交換技術;幀中繼繼協交換;光交換技術(本章);分組交換技術(本章)。以下探索一下計算機網路資料通訊交換及技術的應用內容。 光交換技術: 光交換技術又分為: (1)波分
計算機網路資料通訊交換技術(一)
在多個站點間,要引用資料通訊交換技術才能實現資訊的有效傳遞。計算機網路資料通訊交換技術主要有:電路交換技術(本章);報文交換技術(本章);幀中繼繼協交換(本章);光交換技術;分組交換技術。以下探索一下計算機網路資料通訊交換及技術的應用內容。 電路交換技術 主要是在原站點和目的站點間
Android開發板串列埠(SerialPort)通訊
前言: 最近在總是看見有人在群裡面問一些串列埠通訊相關的問題,特別是對於我們這些做APP出生的程式設計師來說,初次接觸串列埠通訊的確是會遇到各種Bug,各種摸不著頭腦。串列埠通訊偏向嵌入式一點,是Android裝置通過串列埠與其他裝置進行通訊的一種方式,本文介紹的Andr
Android與伺服器端通訊方式(一)之HTTP、TCP、Socket
Android作為客戶端,與伺服器的通訊方式主要有兩種:一種是HTTP通訊,一種是Socket通訊。 一、HTTP、Socket簡介 HTTP通訊:即使用HTTP協議進行通訊,工作原理是客戶端向伺服器端傳送一條HTTP請求,伺服器收到之後先解析客戶
Android外掛技術——(三)載入未安裝apk
上一篇我們介紹了載入已安裝apk,本篇將介紹載入未安裝apk。 未安裝apk由於系統毫不知情,因此無法通過系統api獲取其上下文,自然也就無法獲取其資源。接下來,我們將另闢蹊徑來解決這個問題。 步驟如下: 一、採用上一篇中的Android Host工程,仍
Androin學習筆記四十二:Java android Socket通訊檢測(server)連線是否斷開
Pre 在利用socket寫通訊程式的時候,想檢測伺服器是否還活著。 從網上找了很多資料,都沒有自己合適的,最後自己想了個辦法,不過也相當於截取了心跳檢測的一部分。 這裡檢測的是遠端server的連線,而不是本地是否連線成功。首先想到socket類的方法isClosed()、isConnected
Android熱補丁動態修復技術(二):實戰!CLASS_ISPREVERIFIED問題!(熱修復技術)
在apk安裝的時候,虛擬機器會將dex優化成odex後才拿去執行。在這個過程中會對所有class一個校驗。 校驗方式:假設A該類在它的static方法,private方法,建構函式,override方法中直接引用到B類。如果A類和B類在同一個dex中,那麼A類就會被打上CLASS_ISPREVERIFIED標
Android 資料加密及安全網路通訊雜談(一)
Android 資料加密及安全網路通訊雜談 前言:本人多年從事軟體開發,發現大多數程式設計師(其中包括不少是資深的)、CTO、PM們對資訊保安的瞭解幾乎為零!很多時候,專案負責人在不得不面對資訊保安需求時,隨意指派某個程式設計師(通常還是入行時間最短、技術經驗最少的那位)負