1.開啟終端機並輸入lsusb
找出其中一筆
Bus 002 Device 006: ID 0bb4:0c02 High Tech Computer Corp.
2.在終端機再輸入 sudo gedit /etc/udev/rules.d/50-android.rules
3.在 gedit 中輸入
SUBSYSTEM=="usb", SYSFS{"High Tech Computer Corp."}=="0bb4", MODE="0666"
4.儲存並結束後在終端機再輸入下列指令修改檔案權限
sudo chmod a+rx /etc/udev/rules.d/50-android.rules
5.在終端機再輸入下列指令重新啟動 udev
sudo /etc/init.d/udev restart
6.切換到sdk/tools目錄
cd /usr/lib/eclipse/android-sdk-linux_86/tools/
7.在終端機再輸入下列指令啟動模擬器
sudo ./adb kill-server
sudo ./adb devices
2010年5月8日 星期六
2010年4月24日 星期六
如何在ubuntu 9.10啟動手機USB 除錯模式
gksudo gedit /etc/udev/rules.d/51.android.rules
開新檔案後,輸入
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
儲存
重新載入USB 設備
sudo /etc/init.d/udev reload
移除USB後再插入,並執行
adb devices 後會看到
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached
HT95PKF00221 device
回到eclipse 就可以看到
開新檔案後,輸入
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
儲存
重新載入USB 設備
sudo /etc/init.d/udev reload
移除USB後再插入,並執行
adb devices 後會看到
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached
HT95PKF00221 device
回到eclipse 就可以看到
如何取得無線ip
如何使用WifiInfo 來取得無線網卡的IP位置
完成上述的程式之後,其實一直都沒有辨法成功的執行程式,e.getMessage()是後來才加入。
也是在加入之後出現了錯誤訊息
neither user 10025 nor current process has android.permission.ACCESS_WIFI_STATE
谷了一下才知道原來是沒有開啟 WIFI狀態的讀取權限
就開啟了 AndroidManifest.xml 並加入了權限宣告
需注意的是要加在application 的外層。如果誤加在application內層會無法動作
...前面省略
WifiManager wifiManager;
WifiInfo wifiInfo;
EditText txtInfo;
String strAddress;
@Override
Public void onCreate(Bundle saveInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
//完成了這裏會出現第一個錯誤,錯誤的內容忘了,但是要加下列的東東
strAddress = new Integer(ipAddress).toString();
//將資訊放入EditText就可以了
textInfo.setText(strAddress.toString());
} catch {
Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT).show();
Log.d(e.getMessage().toString(),"訊息");
}
}
完成上述的程式之後,其實一直都沒有辨法成功的執行程式,e.getMessage()是後來才加入。
也是在加入之後出現了錯誤訊息
neither user 10025 nor current process has android.permission.ACCESS_WIFI_STATE
谷了一下才知道原來是沒有開啟 WIFI狀態的讀取權限
就開啟了 AndroidManifest.xml 並加入了權限宣告
<application>
</application>
<uses-permission name="android.permission.ACCESS_WIFI_STATE" />
需注意的是要加在application 的外層。如果誤加在application內層會無法動作
2010年4月4日 星期日
如何另開畫面
在開發程式的過程式,常常都會遇到的功能就是開啟另一視窗。
在android也不例外。
一般開啟另一畫面有分為三種
1.僅開啟新視窗
2.開啟新視窗並將上一視窗資料帶入新視窗內
3.開啟新視窗並將上一視窗資料帶入新視窗內,待新視窗關閉時再將新視窗的結果回傳原視窗
此文件先以1僅開啟新視窗說明
環境
eclipse3.5
android sdk r6
project name : test
**建立一新視窗需分三部份
i.activity (程式碼部份)
ii.layout (畫面部份) / values (常數部份)
iii.Mainfest (加入主架構部份)
i.activity (程式碼部份)
在eclise3.5中開一新的class ( file / new / Class ) 並鍵入資料如下
Source folder : test/src
Package : 按Browser 後選 com.xxx.android.test xxx 依開發者命名
Name : 輸入新視窗的名稱.例如 win1
Superclass : 按Browser後在Choose a type 輸入activity.此時下方的Matching items會顯示可能的選項,在這選擇 Activity - android.app並按下右下角的ok回上一對話框.
此時Superclass會出現android.app.Activity, 按畫面右下方的finish.
eclise 會在src/com.xxx.android.test中產生檔案 win1.java
ii.layout (畫面部份)
在eclipse3.5中開一新的 Android XML File. ( file / new / Android XML File )
File : win1.xml (必需輸入副檔名才行)
What type of resource would you like to create ? 選 Layout
(當設計者選擇layout,待完成此步驟時eclipse 會將win1.xml放入Layout的路徑中 )
按下畫面右下方的finish完成畫面的設定檔. 此時新視窗為一空視窗,尚無任何元件.
** 此步驟同上一步驟.唯一不同的是上一步驟是選Layout 此步驟是選Values.
在eclipse3.5中開一新的 Android XML File. ( file / new / Android XML File )
File : win1.xml (必需輸入副檔名才行)
What type of resource would you like to create ? 選 Layout
(當設計者選擇Values,待完成此步驟時eclipse 會將win1.xml放入Values的路徑中 )
按下畫面右下方的finish完成畫面的設定檔. 此時新視窗為一空視窗,尚無任何元件.
iii.整合入主架構中
在eclipse 的 Project 根路徑中會有一檔案.檔名為 AndroidMainfest.xml.開啟此檔案
在此檔案中有一區段是
......
接在後面輸入
輸入的文字中有一段 @string/win1_title指的是新視窗的tilte要顯示的文字.
剛剛畫面設定中我們有建立了兩個檔案,一個是 Layout/win1.xml 和Values/win1.xml
這個title的文字要在Values/win1.xml中設定。
在這個先完成AndroidMainfest.xml的設定,也就是說在輸入完上面那一行後,將檔案儲存並關閉即可.
接下來打開Values / win1.xml
在和 之間輸入
我是新視窗
完成後按儲存並關閉檔案
最後也就是最重要的步驟就是在原視窗的按鈕中加入程式碼
在 test/src/com.xxx.android.test中開啟 Test.java
在onCreate的外層加入 按鈕和動作的宣告
Button btnWin1;
OnClickListener listener1;
在OnCreate中設定如下
btnWin1 = (Button)findViewById(R.id.btnWin1);
btnWin1.setOnClickListener(listener1;
listener1 = new OnClickListener() {
Public void onClick(View v){
Intent intent = new Intent();
intent.setClass(test.this, win1.class);
startActivity(intent);
}
}; /* 這裏的分號不要忘記了 */
儲存後就完成了。
一開始文章中有提到,另開視窗有分為三種,以上的說明為第一種。
至於其他的兩種就會用到所謂的 Intent 啦
因為不論是要傳送到新視窗或從新視窗傳回資料,都要先將資料用Intent包裝好再傳送到各個activity中.回顧一下剛剛我們在按鈕中設定時有用到intent 就可以了解.
在android也不例外。
一般開啟另一畫面有分為三種
1.僅開啟新視窗
2.開啟新視窗並將上一視窗資料帶入新視窗內
3.開啟新視窗並將上一視窗資料帶入新視窗內,待新視窗關閉時再將新視窗的結果回傳原視窗
此文件先以1僅開啟新視窗說明
環境
eclipse3.5
android sdk r6
project name : test
**建立一新視窗需分三部份
i.activity (程式碼部份)
ii.layout (畫面部份) / values (常數部份)
iii.Mainfest (加入主架構部份)
i.activity (程式碼部份)
在eclise3.5中開一新的class ( file / new / Class ) 並鍵入資料如下
Source folder : test/src
Package : 按Browser 後選 com.xxx.android.test xxx 依開發者命名
Name : 輸入新視窗的名稱.例如 win1
Superclass : 按Browser後在Choose a type 輸入activity.此時下方的Matching items會顯示可能的選項,在這選擇 Activity - android.app並按下右下角的ok回上一對話框.
此時Superclass會出現android.app.Activity, 按畫面右下方的finish.
eclise 會在src/com.xxx.android.test中產生檔案 win1.java
ii.layout (畫面部份)
在eclipse3.5中開一新的 Android XML File. ( file / new / Android XML File )
File : win1.xml (必需輸入副檔名才行)
What type of resource would you like to create ? 選 Layout
(當設計者選擇layout,待完成此步驟時eclipse 會將win1.xml放入Layout的路徑中 )
按下畫面右下方的finish完成畫面的設定檔. 此時新視窗為一空視窗,尚無任何元件.
** 此步驟同上一步驟.唯一不同的是上一步驟是選Layout 此步驟是選Values.
在eclipse3.5中開一新的 Android XML File. ( file / new / Android XML File )
File : win1.xml (必需輸入副檔名才行)
What type of resource would you like to create ? 選 Layout
(當設計者選擇Values,待完成此步驟時eclipse 會將win1.xml放入Values的路徑中 )
按下畫面右下方的finish完成畫面的設定檔. 此時新視窗為一空視窗,尚無任何元件.
iii.整合入主架構中
在eclipse 的 Project 根路徑中會有一檔案.檔名為 AndroidMainfest.xml.開啟此檔案
在此檔案中有一區段是
......
接在後面輸入
輸入的文字中有一段 @string/win1_title指的是新視窗的tilte要顯示的文字.
剛剛畫面設定中我們有建立了兩個檔案,一個是 Layout/win1.xml 和Values/win1.xml
這個title的文字要在Values/win1.xml中設定。
在這個先完成AndroidMainfest.xml的設定,也就是說在輸入完上面那一行
接下來打開Values / win1.xml
在
完成後按儲存並關閉檔案
最後也就是最重要的步驟就是在原視窗的按鈕中加入程式碼
在 test/src/com.xxx.android.test中開啟 Test.java
在onCreate的外層加入 按鈕和動作的宣告
Button btnWin1;
OnClickListener listener1;
在OnCreate中設定如下
btnWin1 = (Button)findViewById(R.id.btnWin1);
btnWin1.setOnClickListener(listener1;
listener1 = new OnClickListener() {
Public void onClick(View v){
Intent intent = new Intent();
intent.setClass(test.this, win1.class);
startActivity(intent);
}
}; /* 這裏的分號不要忘記了 */
儲存後就完成了。
一開始文章中有提到,另開視窗有分為三種,以上的說明為第一種。
至於其他的兩種就會用到所謂的 Intent 啦
因為不論是要傳送到新視窗或從新視窗傳回資料,都要先將資料用Intent包裝好再傳送到各個activity中.回顧一下剛剛我們在按鈕中設定時有用到intent 就可以了解.
2010年2月6日 星期六
2010年1月31日 星期日
資料庫連線問題
在作資料庫連線的練習建立資料表時,要作一個進入程式時檢查如果資料表不存在就新增一個,如果已存在就開啟
SQLiteDatabase dbCheck = null;
//dbCheck = SQLiteDatabase.openDatabase(DATABASE_PATH+DATABASE_NAME, null,SQLiteDatabase.OPEN_READONLY);
if (dbCheck==null){
//新增資料庫
mOpenHelper = new DatabaseHelper(this);
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
String strSqlCreate = "create table " + TABLE_NAME + " (_id integer primary key, name text not null, age integer null, sex text null, hight integer null, weight integer null);";
try {
db.execSQL(strSqlCreate);
setTitle("建立資料表");
} catch (SQLException e){
setTitle(e.getMessage().toString());
}
} else {
setTitle("已建立");
}
程式第二行的DATABASE_PATH設定/data/data/com.xxx.android.test/databases/
DATABASE_NAME = "xxx"
在模擬器上是可以跑的,但是在實機上是沒有辨法跑的。
目前還摸不出答案
SQLiteDatabase dbCheck = null;
//dbCheck = SQLiteDatabase.openDatabase(DATABASE_PATH+DATABASE_NAME, null,SQLiteDatabase.OPEN_READONLY);
if (dbCheck==null){
//新增資料庫
mOpenHelper = new DatabaseHelper(this);
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
String strSqlCreate = "create table " + TABLE_NAME + " (_id integer primary key, name text not null, age integer null, sex text null, hight integer null, weight integer null);";
try {
db.execSQL(strSqlCreate);
setTitle("建立資料表");
} catch (SQLException e){
setTitle(e.getMessage().toString());
}
} else {
setTitle("已建立");
}
程式第二行的DATABASE_PATH設定/data/data/com.xxx.android.test/databases/
DATABASE_NAME = "xxx"
在模擬器上是可以跑的,但是在實機上是沒有辨法跑的。
目前還摸不出答案
2010年1月30日 星期六
下拉元件
下拉元件分為三個部份,一個是畫面上的元件,一個是程式,還有就是下拉的內容
(為了完整呈現原始碼,所以在程式碼的&使用時要拿掉)
1.畫面main.xml加入
@+id/object:為元件的id=object
layout_width=" fill_parent="">layout_hight="wrap_content"為元件的高度=元件高度
drawSelectorOnTop="true" 指定這個下拉選單是否可以顯示在其他選單的上層,只有在多層選單上才會顯示出效果
prompt 指定下拉選單彈出選單選項提示(彈出選單的標題)
2.設定下拉元件的內容
在value下新增一個檔案,檔名為arrays.xml 這個檔案可用來放置像下拉選單的內容
因為是新的檔案,所以要在檔案中放入
<&?xml version="1.0" encoding="utf-8"?>
<&resources>
<&!-- obj下拉內容 -->
<&string-array name="obj">
<&item>男
<&item>女
<&/string-array>
<&/resources>
如果arrays.xml已存在,則只要加入<&string-array>段就可以了
3.程式 xxx.java加入
(外層)Spinner obj;
(外層)
private void initLayout(){
obj = (Spinner)findViewById(R.id.obj);
ArrayAdapter adp = ArrayAdapter.createFromResource(
this, R.array.sexs, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
obj.setAdapter(adp);
}
外層就是指
@Override
public void onCreate的上一層
在外層宣告 obj是Spinner
再設定一個自訂函數initLayout 用來初始化元件
obj = (Spinner)findViewById(R.id.obj); 指定程式中的obj為畫面上的Spinner
設定adapter(接口) 參考備註1 用來連結資料到下拉選單中
ArrayAdapter adp= ArrayAdapter.createFromResource(
this, R.array.obj, android.R.layout.simple_spinner_item);
這裏使用的是陣列型的接口.接回名稱訂為adp. 裏面包含三個參數
參數1是這個Activity本身(用this 表示)
參數2是資料來源也就是在步驟2中設定的資料。 R.array.obj 中的obj就是在步驟2中設定的name="obj"
參數3是傳入的陣列。simple_spinner_item為Android陣列所內建的預設下拉選單選項格式
setDropDownViewResource 為設定資源到下拉選單中
obj.setAdapter(adp);設定下拉元件的接口
最後在onCreate中加入執行initLayout();就可以了
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initLayout(); <-- 這一行
}
執行一下程式就可以看到效果了
備註1
在android中並不允許直接將字串陣列套用在介面元件中。介面選單的項目,都必預透過Adapter來連結。書上稱Adapter為接口。加了adapter主要是保持程式的使用彈性。
adapter有分為很多種
ArrayAdapter 讀入程式中已宣告的陣列,並轉換成介面元件看的懂的接回元件
SimpleAdapter 從XML文字字串檔讀入陣列
CursorAdapter 從ContentProvider讀入陣列.主要和 DB有關。像讀入通訊錄之類的
(為了完整呈現原始碼,所以在程式碼的&使用時要拿掉)
1.畫面main.xml加入
@+id/object:為元件的id=object
layout_width=" fill_parent="">layout_hight="wrap_content"為元件的高度=元件高度
drawSelectorOnTop="true" 指定這個下拉選單是否可以顯示在其他選單的上層,只有在多層選單上才會顯示出效果
prompt 指定下拉選單彈出選單選項提示(彈出選單的標題)
2.設定下拉元件的內容
在value下新增一個檔案,檔名為arrays.xml 這個檔案可用來放置像下拉選單的內容
因為是新的檔案,所以要在檔案中放入
<&?xml version="1.0" encoding="utf-8"?>
<&resources>
<&!-- obj下拉內容 -->
<&string-array name="obj">
<&item>男
<&item>女
<&/string-array>
<&/resources>
如果arrays.xml已存在,則只要加入<&string-array>段就可以了
3.程式 xxx.java加入
(外層)Spinner obj;
(外層)
private void initLayout(){
obj = (Spinner)findViewById(R.id.obj);
ArrayAdapter
this, R.array.sexs, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
obj.setAdapter(adp);
}
外層就是指
@Override
public void onCreate的上一層
在外層宣告 obj是Spinner
再設定一個自訂函數initLayout 用來初始化元件
obj = (Spinner)findViewById(R.id.obj); 指定程式中的obj為畫面上的Spinner
設定adapter(接口) 參考備註1 用來連結資料到下拉選單中
ArrayAdapter
this, R.array.obj, android.R.layout.simple_spinner_item);
這裏使用的是陣列型的接口.接回名稱訂為adp. 裏面包含三個參數
參數1是這個Activity本身(用this 表示)
參數2是資料來源也就是在步驟2中設定的資料。 R.array.obj 中的obj就是在步驟2中設定的name="obj"
參數3是傳入的陣列。simple_spinner_item為Android陣列所內建的預設下拉選單選項格式
setDropDownViewResource 為設定資源到下拉選單中
obj.setAdapter(adp);設定下拉元件的接口
最後在onCreate中加入執行initLayout();就可以了
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initLayout(); <-- 這一行
}
執行一下程式就可以看到效果了
備註1
在android中並不允許直接將字串陣列套用在介面元件中。介面選單的項目,都必預透過Adapter來連結。書上稱Adapter為接口。加了adapter主要是保持程式的使用彈性。
adapter有分為很多種
ArrayAdapter 讀入程式中已宣告的陣列,並轉換成介面元件看的懂的接回元件
SimpleAdapter 從XML文字字串檔讀入陣列
CursorAdapter 從ContentProvider讀入陣列.主要和 DB有關。像讀入通訊錄之類的
2010年1月23日 星期六
資料欄位的參數
EditText 一般比較常看到的參數是
android:layout_width="fill_parent" 就是向右延伸
android:layout_height="fill_parent" 是向下延伸到畫面底部
android:layout_height="wrap_content" 預設是一行,但可以動態增加
android:password="true" 密碼欄位
android:numbric="integer" 分為int,signed和decimal 都是數字為整數,小數
android:signleline="true" 單行
android:layout_width="fill_parent" 就是向右延伸
android:layout_height="fill_parent" 是向下延伸到畫面底部
android:layout_height="wrap_content" 預設是一行,但可以動態增加
android:password="true" 密碼欄位
android:numbric="integer" 分為int,signed和decimal 都是數字為整數,小數
android:signleline="true" 單行
2010年1月1日 星期五
android 的圖示設計
在android 的程式設計中,圖示是很重要的一環,
大部份的行動設備上都是以圖示來代表各項功能。
在android的程式設計中,提供了圖示的規格範本
例如
尺寸 48px X 48px
色版 白色 r 0 | g 0 | b 0 用於圖示或斜光的內容
深灰漸層 1: r 169 | g 169 | b 169
2: r 126 | g 126 | b 126 用於停用圖示的明細
填補漸層 1: 1 r 105 | g 105 | b 105
2: r 10 | g 10 | b 10 用於填補顏色
黑色 Black r 255 | g 255 | b 255 用於陰影
參考 http://developer.android.com/guide/practices/ui_guidelines/icon_design.html#menupalette
大部份的行動設備上都是以圖示來代表各項功能。
在android的程式設計中,提供了圖示的規格範本
例如
尺寸 48px X 48px
色版 白色 r 0 | g 0 | b 0 用於圖示或斜光的內容
深灰漸層 1: r 169 | g 169 | b 169
2: r 126 | g 126 | b 126 用於停用圖示的明細
填補漸層 1: 1 r 105 | g 105 | b 105
2: r 10 | g 10 | b 10 用於填補顏色
黑色 Black r 255 | g 255 | b 255 用於陰影
參考 http://developer.android.com/guide/practices/ui_guidelines/icon_design.html#menupalette
訂閱:
意見 (Atom)