顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2011年10月4日 星期二

Android修改system唯讀權限:remount

完整文章來源http://blog.csdn.net/lixinso/article/details/5835598

lixinso@lixinso-desktop:~$ adb shell
# mount
# mount -o remount /dev/block/mtdblock0 /system
# mount

mount完就可以任意修改删除拉~~~~


另一個更簡單的方法是直接
:~$adb remount

即可

2011年1月11日 星期二

Android Service 定時自動執行

在Android讓widget自動更新其實可以直接寫在widget Provider的onUpdate裡就行了
但是後面的版本並不能設定update的時間,他已經被設定成30分鐘更新一次
所以如果要讓widget自動更新比較好的做法事建立一個Service並註冊一個AlarmManager設定定時執行的間隔時間
以下為範例
在Service中定義一個PendngIntent

public static PendingIntent serviceIntent = null;

在Service中定義註冊AlarmManager的Function

public static void registerService(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

//如果serviceIntent不為null(已註冊過)
if (serviceIntent != null)
alarmManager.cancel(serviceIntent); //清除

final int updateInterval = 60 * 60000;//間隔時間單位為ms

//間隔時間不為0
if (updateInterval != 0) {
//如果serviceIntent為null

if (serviceIntent == null) {
//建立intent
Intent intent = new Intent(context, 要更新的Service.class);
//建立serviceIntent
serviceIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
//在AlarmManager設定重覆執行的Server的intent
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + updateInterval,
updateInterval, serviceIntent);
}
}

在Service中定義取消AlarmManager註冊

public static void removeService(Context context) {
if (serviceIntent != null) {
((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).cancel(serviceIntent);
serviceIntent = null;
}
}


最後在Widget實作onEnabled和onDisabled兩個Function
各別在裡面呼叫registerService和removeService即可


@Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
UpdateService.removeService(context);

super.onDisabled(context);
}

@Override
public void onEnabled(Context context) {
// TODO Auto-generated method stub
UpdateService.registerService(context);
super.onEnabled(context);
}

2010年12月24日 星期五

Android EditText的輸入事件

關於Android的EditText的輸入事件,一開始我以為是用OnKeyListener去處理就可以了。
後來發現我錯了...OnKeyListener只接收"實體鍵盤的event觸發"對一般Android都是觸控的虛擬鍵盤一點反應都沒有。Google後發現應該是要用addTextChangedListener來處理才是正確的做法
程式大致如下:

myEditText.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub

}});

裡面三個function是new TextWatcher()必須要實作的
程式寫在onTextChange()那function裡面就可以了

2010年12月2日 星期四

Android Http Get 實作範例

首先
在AndroidManifest.xml中要加入可以使用網路的權限
< uses-permission android:name="android.permission.INTERNET" >< /uses-permission >

在程式部份

//for Http Get
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;


public void executeHttpGet() throws Exception {
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(網址);
HttpResponse response = client.execute(request);
String retSrc = EntityUtils.toString(response.getEntity());

System.out.println(retSrc);
} finally {
}
}

Android SharedPreferences 儲存簡單的欄位資訊

Android 提供了 SharedPreferences 這個介面讓我們方便存取一些預設資料或是一些簡單的使用者輸入的欄位資訊
要使用這個介面第一步當然是
import android.content.SharedPreferences;

接著,就是程式碼的部份

首先介紹儲存資料的部份
//取得SharedPreferences物件 (參數一是偏好設定檔的名稱,參數二是讀取權限)
SharedPreferences pref = getSharedPreferences("PREF_STOCK", MODE_WORLD_WRITEABLE);
//要修改偏好設定檔必須透過一個SharedPreferences.Editor 物件
//取得SharedPreferences.Editor 物件
SharedPreferences.Editor prefEdt = pref.edit();
//寫入資料(參數一是欄位名稱,參數二是要寫入的資料)
prefEdt.putString("PREF_T", "hello world");
//最後一定要commit將資料寫入檔案
prefEdt.commit();


在讀取方面就簡單多了

//取得SharedPreferences物件 (參數一是偏好設定檔的名稱,參數二是讀取權限)
SharedPreferences pref = getSharedPreferences("PREF_STOCK", MODE_WORLD_WRITEABLE);
//取得資料 (參數一是欄位名稱,參數二是讀取失敗時的預設資料)
String getS = pref.getString("PREF_T", "");


以上就是讀寫一個偏好設定檔要用的功能了
其他更深入的說明介紹可以參考以下的資料
http://asia.edu.tw/~lincyu/Android/Chapter11.pdf

http://developer.android.com/reference/android/content/SharedPreferences.html

Android 讀取JSON使用範例

在Android中使用JSON其實滿方便的,因為Libary已經有寫好了,只要直接拿來用就好了
首先

import org.json.JSONObject;
import org.json.JSONArray;

然後假設JSON格式的資料在一個字串json_data中
如果資料最外層是[]那就是JSONArray
最外層是{}則是JSONObject

以上一篇從Google取得的股票資料為例
最外層是[]然後裡面有不同的物件
取得資料方式如下

//將資料寫入JSONArray
JSONArray result = new JSONArray(json_data);
//取出陣列內所有物件
for(int i = 0;i < result.length(); i++)
{
//取出JSON物件
JSONObject stock_data = result.getJSONObject(i);
//取得物件內資料
System.out.println("t:"+stock_data.getString("t"));
System.out.println("l_cur:"+stock_data.getString("l_cur"));
System.out.println("c:"+stock_data.getString("c"));
System.out.println("cp:"+stock_data.getString("cp"));
}



可參考API網址
http://developer.android.com/reference/org/json/package-summary.html

2010年11月26日 星期五

Android Bitmap 存檔


import java.io.File;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;


File myDrawFile = new File(mSaveFilePath);
try {
BufferedOutputStream bos = new BufferedOutputStream
(new FileOutputStream(myDrawFile));
mBitmap.compress(Bitmap.CompressFormat.PNG, 90, bos);
bos.flush();
bos.close();

} catch (Exception e) {
e.printStackTrace();
Log.d(null, "Save file error!");
return false;
}
Log.d(null, "Save file ok!");
return true;

2010年11月9日 星期二

Android初體驗之編譯出xxx.out.xml的錯誤

在寫Android 的時候有時候會發生出現xxx.out.xml的錯誤
這種錯誤的解決方法是

1.在Project->Clean清除目前的編譯
2.從專案中刪除xxx.out.xml
3.重新編譯

這問題發生的原因是:在Eclipse中編輯XML檔案,會預設用XSLT來轉換文件
所以當我們要執行編譯時,要把焦點由XML移開到專案上
為了必免這個問題可以參考以下做法


可以在Eclipse設定,選單Windows->Preference,選擇節點Run/Debug->Lauching,Lauch Operation選擇第一項。





這樣就不用每次都要把Focus 移開XML文件。

參考如下:
http://programmersay.blogspot.com/2010/07/android-mainoutxml.html
http://www.cnblogs.com/chunhui588/archive/2010/06/26/Android-debug-main-out-xml-parsing-error.html