2010年5月8日 星期六

在Ubuntu環境安裝android驅動程式

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年4月24日 星期六

如何設定無線網路

網友的無線網路資訊範本

http://www.anddev.org/wifiscanner-t4099.html

如何在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 就可以看到

如何取得無線ip

如何使用WifiInfo 來取得無線網卡的IP位置

...前面省略
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 就可以了解.

2010年2月6日 星期六

資料庫連線相關

和資料庫連線相關的網頁
裏面提供數種正規和非正規的用法

http://www.android1.net/Topic.aspx?BoardID=11&TopicID=305

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"
在模擬器上是可以跑的,但是在實機上是沒有辨法跑的。
目前還摸不出答案

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有關。像讀入通訊錄之類的

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" 單行

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