目前分類:Android筆記 (435)

瀏覽方式: 標題列表 簡短摘要

package zhang.bluetooth;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.CoNtext;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;

戮克 發表在 痞客邦 留言(0) 人氣()

Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发。
1. 首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限

// 管理蓝牙设备的权限

<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />

// 使用蓝牙设备的权限

<uses-permissionandroid:name="android.permission.BLUETOOTH" />

2.打开蓝牙
获得蓝牙适配器(android.bluetooth.BluetoothAdapter),检查该设备是否支持蓝牙,如果支持,就打开蓝牙。

[java]
// 检查设备是否支持蓝牙

戮克 發表在 痞客邦 留言(0) 人氣()

1. 確認nfc是否可用

[java]
NfcManager manager = (NfcManager) CoNtext.getSystemService(CoNtext.NFC_SERVICE);
NfcAdapter adapter = manager.getDefaultAdapter();
if (adapter != null && adapter.isEnabled()) {
adapter exists and is enabled.
System.out.println("can");
}else{
System.out.println("can't"); //
}

戮克 發表在 痞客邦 留言(0) 人氣()

android訪問NFC的SE所有文檔都在這裡。
可 惜的是,目前只能訪問內部SE,對於外部sim或SD的SE,幾乎所有的手機都不支援,原因:支援SIM卡的SE,還沒有AT命令;支援SD卡的SE,還 沒有API介面。 為什麼會這樣,很簡單,因為它們不是google,沒有開源的精神! 所以我們現在只能訪問內部SE,就是存在NFC晶片的SE。
訪問SE使用的是SEService/Smartcard Service。 手機上必須要安裝SEService/Smartcard Service,這個由手機研發實現。
創建
[html]
seService = new SEService(this, this);
繼承
[html]
implements SEService.CallBack
實現介面

戮克 發表在 痞客邦 留言(0) 人氣()

從 Android2.3開始支援NFC。 不過NFC應用只能在Android手機(或平板電腦)上測試和開發,而且Android手機還必須有NFC芯 片。 而且如果測試NFC傳輸檔時至少需要兩部支援NFC的手機。 當然,如果測試讀寫NFC標籤,還需要一些NFC標籤或帖子。 而且NFC在模擬器上時不 能運行的。 所以從這一點來說,NFC開發需要更多的設備,比較麻煩。 這也藍牙、感應器是一樣的。 都不能在Android模擬器上開發和測試。 真不知道 Google為什麼不解決這一問題。

不 過這種問題也不是不能解決,而且並不複雜。 既然模擬器沒有提供這樣的功能。 我們可以將NFC功能類比出來(實際上,藍牙、感應器都可以進行類比,可能很 多讀者用過一些感應器類比軟體,NFC類比和這個類似)。 而且要求是與真實的NFC環境無縫對接。 也就是說,使用類比NFC功能開發的Android應用 可以不需要修改一行代碼,甚至不需要重新編譯,就可以直接用在真實的NFC環境。

 

那 麼怎麼解決這個問題呢? 要想知道如何類比NFC,需要先從宏觀上瞭解NFC的工作原理。 這裡用NFC標籤作為例子。 NFC資料傳輸和這個類似。 當NFC 標籤靠近手機時,Android系統中有一個叫Nfc的系統應用(在<Android原始程式碼根目錄>/pakcages/apps /Nfc目 錄中),該應用會發送一個Activity Action,該Action會調用一個在系統中註冊的用於處理NFC請求的視窗(如果沒有,就調用Nfc應用中預設的處理視窗)。 這裡的關鍵是 Activity Action。 既然Nfc應用會發出一個Activity Action,那麼用於類比NFC的程式,也發送一個Activity Action,不就可以共用用於處理NFC請求的視窗(由使用者建立的Activity)了嗎? 只要在發送Activity Action時加一個標誌,就可以區分是Activity Action是Nfc系統應用發出的,還是類比NFC的程式發出的。 這樣在處理請求的NFC視窗中就可以根據不同的情況進行處理。 為了更透明,可以編寫一 個Activity類(如NFCActivity),該類根據這兩種情況進行處理。 又因為不管是哪種情況,都需要提供寫入NFC標籤的資料,或接收NFC 標籤中的資料。 所以可以在該NFCActivity中提供一些回檔方法,當需要提供或接收資料時,調用這些方法即可。 最後需要使用NFC功能時,使用者自己 編寫的視窗類只需要從NFCActivity類繼承,並實現相應的回檔方法即可。 例如,下面就是一個實現方法,可接收NFC標籤的資料,並寫入新資料。

 

 
public class NFCManTestActivity extends NFCActivity
{
private NFCMan mNfcMan;
private EditText nfcTagText;

戮克 發表在 痞客邦 留言(0) 人氣()

 

Android支援的資料格式

20140603045415_0.gif 


戮克 發表在 痞客邦 留言(0) 人氣()

转自

蓝牙(BlueTooth)要求的最低版本是android2.0,由于Android模拟器不支持蓝牙,运行蓝牙的有关应用必须在真机上测试运行。

蓝牙是一种重要的短距离无线通信协议,广泛应用于各种设备(手机,医疗,汽车等)。蓝牙是比较常用的无线通信设备,早研究成为手机的标配。

在Android中,与蓝牙有关的类和接口在android.bluetooth包中。其中BluetoothAdapter是蓝牙中的核心类,

代表本地的蓝牙适配器设备。BluetoothAdapter类让用户能执行基本的蓝牙任务。例如: 初始化设备的搜索,查询可匹配的设备集,使用一个已知的MAC地址来初始化一个BluetoothDevice类,创建一个 BluetoothServerSocket类以监听其它设备对本机的连接请求等。

当我们使用蓝牙时会先判断当前手机是否打开了蓝牙,然后在进行相应的处理。

下面我们看看怎样打开蓝牙设备。

1.我们调用时除了需要考虑API Level至少为5外,还需注意添加相应的权限,比如使用通讯需要在androidmanifest.xml加入<uses-permissionandroid:name="android.permission.BLUETOOTH" />,而开关蓝牙需要android.permission.BLUETOOTH_ADMIN权限。

只要是有关蓝牙的应用程序这两个不可少。

戮克 發表在 痞客邦 留言(0) 人氣()

Android 工程混淆後報出如下錯誤:

 

10-19 13:26:19.750: E/AndroidRuntime(13654): Caused by: android.view.InflateException: Binary XML file line #193: Error inflating

… …

E/AndroidRuntime(13480): Caused by: java.lang.ClassNotFoundException: com.neusof

t.neuapp.ui.AppPicsGallery in loader dalvik.system.PathClassLoader[/data/app/com

.neusoft.neuapp.ui-1.apk]

E/AndroidRuntime(13480):        at dalvik.system.PathClassLoader.findClass(PathC

lassLoader.java:240)

E/AndroidRuntime(13480):        at java.lang.ClassLoader.loadClass(ClassLoader.j

戮克 發表在 痞客邦 留言(0) 人氣()

簡析adb的埠映射功能,將PC端的某埠資料重定向到手機端的一個埠

================================================

 

曾經以為adb forward是個好東東,因為通過這個映射之後,在PC和設備之間就可以直接socket通信了。 可現在終於發現,世界不是完美的。

 

Android Debug Bridge設計的目的,一是用來管理所有連接的設備;二是提供各種服務,供PC端有效的控制設備。 主要包括三個部分:

 

1) ADB-server

 

運 行在PC端,是一個始終在後臺運行的進程,作為與手機端交互的唯一介面。 ADB-server處理ADB-client的請求,一部分請求無須與 設備交互,直接在PC本地完成;剩下的請求需要與設備端的adbd交互,ADB-server起到了一個switcher的作用。

戮克 發表在 痞客邦 留言(0) 人氣()

.sudo apt-get install curl

2.curl HTTP://git-repo.googlecode.com/files/repo-1.12 > ~/bin/repo

 

3.chmod a+x ~/bin/repo

 

4.修改~/bin/repo檔將第五行

 

REPO_URL='HTTPs://code.google.com/p/git-repo/'

 

改為

戮克 發表在 痞客邦 留言(0) 人氣()

-keepattributes Exceptions  保留exception
-keepattributes Signature   保留泛型


戮克 發表在 痞客邦 留言(0) 人氣()

eclipse會指出這是:unsolved inclusion

在 NDK 專案上點擊右鍵,選擇:New->Folder->Advanced->Link to alternate location(Linked Folder)
然後點擊 Browse 按鈕選擇標頭檔所在路徑,例如:\opt\android\android-ndk-r8b\platforms\android-8\arch-arm\usr\include

戮克 發表在 痞客邦 留言(0) 人氣()

Android2.3以前的版本,也即SDK/API 10和以前的版本內部的執行緒池限制是5個,也就是說同時只能有5個執行緒運行。

從Android 3.0開始對AsyncTask的API做出了一些調整:

 

1#execute()提交的任務,按先後順序每次只運行一個

 

2 新增了介面#executeOnExecutor()。 這個介面允許開發者提供自訂的執行緒池來運行和調度Thread,如果你想讓所有的任務都能併發同時運行,那就創建一個沒有限制的執行緒池 (Executors.newCachedThreadPool()),並提供給AsyncTask。 這樣這個AsyncTask實例就有了自己的執行緒池而不必使用AsyncTask預設的



4.4.2預設執行緒池大小改為

 

private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();

戮克 發表在 痞客邦 留言(0) 人氣()

文档参考

http://www.jarvana.com/jarvana/view/com/google/android/tools/ddmlib/r13/ddmlib-r13-javadoc.jar!/index.html

 

参考范例如下

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;


戮克 發表在 痞客邦 留言(0) 人氣()

adb 在platform-tools 下,在你的命令列中輸入adb help,就可得到其用法說明。

D:\AndroidENV\android\android-sdk\platform-tools>adb help
Android Debug Bridge version 1.0.29

 

-d - directs command to the only connected USB device
returns an error if more than one USB device is present.
-e - directs command to the only running emulator.
returns an error if more than one emulator is running.
-s <serial number> - directs command to the USB device or emulator with
the given serial number. Overrides ANDROID_SERIAL

戮克 發表在 痞客邦 留言(0) 人氣()

首先說明,定位城市是基於地圖服務API的。

 

GPS定位城市需要做兩個步驟:

 

1、取得使用者當前位置的經度,緯度。

 

2、根據經緯度轉換成城市名稱。

 

經緯度轉換成城市名稱,只能使用地圖服務了。 自己做不來。

 

戮克 發表在 痞客邦 留言(0) 人氣()

並不是所有Android手機上都保留有距離感應器。 基於這個感應器可以有一些很不錯的小應用,比如近距離感應鎖屏、解鎖......

分享Rexsee的距離感應功能源碼,回頭可以自個兒做。。 更多的感應器API我這幾天都有陸續發出,大家可以自己搜「Android感應器API之......」,

 

SensorProximity.java全部源碼:

 

[代碼] JAVA代碼

 

/*

 

* Copyright (C) 2011 The Rexsee Open Source Project

戮克 發表在 痞客邦 留言(0) 人氣()

這 幾天有個需求就是把自己的應用程式要設置為Launcher的形式,設置後onCreate就會啟動倆次,在網上找了資料後說是橫豎屏設置造成的先說結 果:在MainAcitivity裡設置android:configChanges="mcc|mnc"就能解決問題的。

今天在看log的時候發現,Launcher activity會被onDestroy掉一次,然後再重啟。
可能原因猜測:
1.橫豎屏切換
2.MCC MNC等Configuration改變引起的 MCC(移動國家碼)和 MNC(移動網路碼)
由於當時的Launcher設置為強制橫屏了,應該是不會引起重啟的。
對於Configuration改變系統會發一個android.intent.action.CONFIGURATION_CHANGED的廣播
於是就做了一個廣播接收器去檢測是不是由於Configuration改變引起的(後來發現Launcher本身有監聽這個廣播)
果然發現MCC值由0(未定義)變為460(中國)

戮克 發表在 痞客邦 留言(0) 人氣()

前言:

我 的android設備是原道N70雙擎pad。 這個平板電腦沒有後置攝像頭,只有前置攝像頭,當我安裝一些程式的時候,會出現「xxxx.apk已經終止」的錯誤,然後程式就會退出。 思前想後,發現一般的應用程式是安裝在手機上的,程式的預設攝像頭是後置攝像頭。 由於我的pad沒有後置攝像頭,所以,調用後置攝像頭就發生失敗! 怎麼解決呢?
解決問題
程式設計的時候,我們在調用Camera函數的open函數之前,必須查找是否有可用的攝像頭。 然後將查找到的攝像頭序號傳遞給Camera類的open函數。




@TargetApi(9)
private int FindFrontCamera(){

戮克 發表在 痞客邦 留言(0) 人氣()

在專案移植過程中發現了一個離奇的問題,以前的專案是2.3的。 後來移植到4.0上面發現sdcard不能創建目錄許可權全部都加了。

 

研究了一會發現目錄出現多層是不能創建 例如:(/mnt/sdcard/test/hh) 只有一層目錄是正常創建例如(/mnt/sdcard/test)

 

解決問題的方法:首先解析路徑放入陣列中然後遍歷創建資料夾




private void makeRootDirectory(String filePath) {

戮克 發表在 痞客邦 留言(0) 人氣()