1. 說明
撥打電話權限:<uses-permission android:name="android.permission.CALL_PHONE" />
允許程式新增模擬位置(DDMS提供模擬GPS位址給模擬器測試用):android.permission.ACCESS_MOCK_LOCATION
允許程式存取CellID或WiFi熱點來取得粗略的位置:android.permission.ACCESS_COARSE_LOCATION
存取閃光燈:android.permission.FLASHLIGHT
允許程式使用網路權限android.permission.INTERNET
允許程式讀取簡訊訊息android.permission.READ_SMS
請求能夠重新啟動設備:android.permission.REBOOT
允許一個程式初始化一個電話撥號不需透過撥號使用者界面需要使用者確認:android.permission.CALL_PHONE
允許程式錄製音訊:android.permission.RECORD_AUDIO
允許程式發送簡訊:android.permission.SEND_SMS
允許程式讀取使用者聯絡人資料:android.permission.READ_CONTACTS
允許程式設定時間區域android.permission.SET_TIME_ZONE
允許存取振動設備:android.permission.VIBRATE
允許程式寫入資料:android.permission.WRITE_OWNER_DATA
允許一個程式存取精確位置(如GPS):android.permission.ACCESS_FINE_LOCATION
允許程式存取Wi-Fi網路狀態訊息:android.permission.ACCESS_WIFI_STATE
允許程式更新手機電池統計訊息:android.permission.BATTERY_STATS
允許程式連接到已配對的藍牙設備:android.permission.BLUETOOTH
請求存取使用照相設備:android.permission.CAMERA
允許程式刪除暫存檔案:android.permission.DELETE_CACHE_FILES
允許程式改變Wi-Fi連接狀態:android.permission.CHANGE_WIFI_STATE
2013年8月6日 星期二
(Android Note) App 呼叫另一個 App
1. code
Intent intent = new Intent("android.intent.action.MAIN");
intent.setClassName("package", "package.class"); //package name and class name
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT );
startActivity(intent);
<!--隱藏不顯示在桌面 <category android:name="android.intent.category.LAUNCHER" /> -->
intent.setClassName("package", "package.class"); //package name and class name
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT );
startActivity(intent);
<!--隱藏不顯示在桌面 <category android:name="android.intent.category.LAUNCHER" /> -->
2013年5月31日 星期五
(Android Note) Refresh Tabhost
加入此行(addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)),每次按tab鍵就會重整.
example:
new Intent(this,X.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
example:
new Intent(this,X.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
2013年5月29日 星期三
(Android Note) is not valid; is your activity running?
由於父activity包含子activity,但是子的activity要產生一個new AlertDialog.Builder(this),此時就會發生錯誤。
解決方式,把this改成指向父節點getParent()。
解決方式,把this改成指向父節點getParent()。
2013年2月28日 星期四
android:Theme 用法
說明
(1) /res/values/目錄, 預設的styles.xml
<resources>
<style name="AppTheme" parent="android:Theme.Black" />
</resources>
(2) 參數
android:theme="Theme.Light" //背景為白色
android:theme="Theme.Light.NoTitleBar" //白色背景並無標題欄
android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,無標題欄,全螢幕
android:theme="Theme.Black" //背景黑色
android:theme="Theme.Black.NoTitleBar" //黑色背景,無標題欄
android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,無標題欄,全螢幕
android:theme="Translucent" //半透明
android:theme="Theme.Translucent.NoTitleBar"
android:theme="Theme.Translucent.NoTitleBar.Fullscreen"
android:theme="Theme.Panel"
android:theme="Theme.Light.Panel"
android:theme="@android:style/Theme.Dialog" //將一個Activity顯示為話框模式
android:theme="@android:style/Theme.NoTitleBar" //無標題欄
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //無標題欄,全螢幕
android:theme="Theme.Wallpaper" //系統桌面為應用程式背景
android:theme="Theme.Wallpaper.NoTitleBar" //系統桌面為應用程式背景,無標題欄
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //系統桌面為應用程式背景,無標題欄,全螢幕
(1) /res/values/目錄, 預設的styles.xml
<resources>
<style name="AppTheme" parent="android:Theme.Black" />
</resources>
(2) 參數
android:theme="Theme.Light" //背景為白色
android:theme="Theme.Light.NoTitleBar" //白色背景並無標題欄
android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,無標題欄,全螢幕
android:theme="Theme.Black" //背景黑色
android:theme="Theme.Black.NoTitleBar" //黑色背景,無標題欄
android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,無標題欄,全螢幕
android:theme="Translucent" //半透明
android:theme="Theme.Translucent.NoTitleBar"
android:theme="Theme.Translucent.NoTitleBar.Fullscreen"
android:theme="Theme.Panel"
android:theme="Theme.Light.Panel"
android:theme="@android:style/Theme.Dialog" //將一個Activity顯示為話框模式
android:theme="@android:style/Theme.NoTitleBar" //無標題欄
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //無標題欄,全螢幕
android:theme="Theme.Wallpaper" //系統桌面為應用程式背景
android:theme="Theme.Wallpaper.NoTitleBar" //系統桌面為應用程式背景,無標題欄
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //系統桌面為應用程式背景,無標題欄,全螢幕
2013年1月15日 星期二
(Android Note) 驗證是否有網路連線
1. code
//判斷當前網路連接狀態 、0 無連接 、1 3G、2 WIFI
public static int checkNetworkInfo(Context context){
int stateType = 0;
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
State mobile =
cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState(); //取得3G連線狀態
State wifi =
cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); //取得WIFI連線狀態
if (mobile == State.CONNECTED || mobile == State.CONNECTING){
stateType = 1;
}
if (wifi == State.CONNECTED || wifi == State.CONNECTING){
stateType = 2;
}
return stateType;
}
- *AndroidManifest 開啟權限
- <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /> //訪問存取網路狀態許可權限
- <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" /> //訪問存取wifi狀態許可權限
- <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> //訪問存取手機狀態許可權限
(Android Note) AlertDialog.Builder
1. Code
final AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle(" Test ");
builder.setMessage(" Test ");
builder.setIcon(android.R.drawable.ic_dialog_alert);
//3種事件處理方式
builder.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("Cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.setNeutralButton("other things", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.show();
final AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle(" Test ");
builder.setMessage(" Test ");
builder.setIcon(android.R.drawable.ic_dialog_alert);
//3種事件處理方式
builder.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("Cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.setNeutralButton("other things", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
builder.show();
2013年1月3日 星期四
(Android Note) 內部和外部儲存空間大小
1. Code
(1) sdcard 是否存在
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
return true; //存在
return false; //不存在
(2) 內部儲存空間
File path = android.os.Environment.getDataDirectory();
StatFs sf = new StatFs(path.getPath());
long bs = sf.getBlockSize();
long ab = stat.getAvailableBlocks();
long bc = stat.getBlockCount();
retrun bs*ab; //剩餘儲存空間
retrun bs*bc; //總儲存空間
(3) sdcard儲存空間
File path = android.os.Environment.getExternalStorageDirectory();
StatFs sf = new StatFs(path.getPath());
long bs = sf.getBlockSize();
long ab = stat.getAvailableBlocks();
long bc = stat.getBlockCount();
retrun bs*ab; //剩餘儲存空間
retrun bs*bc; //總儲存空間
2. 說明
bs(block size),在fat32檔案系統, block size是 4096 byte,其他可以用getBlockSize()來找出block size 大小。
(1) sdcard 是否存在
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
return true; //存在
return false; //不存在
(2) 內部儲存空間
File path = android.os.Environment.getDataDirectory();
StatFs sf = new StatFs(path.getPath());
long bs = sf.getBlockSize();
long ab = stat.getAvailableBlocks();
long bc = stat.getBlockCount();
retrun bs*ab; //剩餘儲存空間
retrun bs*bc; //總儲存空間
(3) sdcard儲存空間
File path = android.os.Environment.getExternalStorageDirectory();
StatFs sf = new StatFs(path.getPath());
long bs = sf.getBlockSize();
long ab = stat.getAvailableBlocks();
long bc = stat.getBlockCount();
retrun bs*ab; //剩餘儲存空間
retrun bs*bc; //總儲存空間
2. 說明
bs(block size),在fat32檔案系統, block size是 4096 byte,其他可以用getBlockSize()來找出block size 大小。
2012年12月12日 星期三
(Android Note) 畫面横屏OR值屏
1. code
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//畫面直向
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//畫面橫向
以上畫面只要轉方向時,activity 會重新執行。
- 如果不要 activity 重新執行,需要在 AndroidManifest.xml 檔案中,在 activity 加入 android:configChanges="orientation|keyboardHidden" 就會禁止重新執行。
2012年11月22日 星期四
(Android Note) webview 字體設定
1. code
(1) 卷軸設定
WebView.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
WebView.setHorizontalScrollBarEnabled(false); //橫軸
WebView.setVerticalScrollBarEnabled(false); //縱軸
(2)字體
WebView.getSettings().setDefaultFontSize(value); //value 數值
OR
WebView.getSettings().setTextSize(WebSettings.TextSize.Normal); //TextSize只有5種設定方式(Smallest、Smaller、Normal、Larger、Largest)
(1) 卷軸設定
WebView.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
WebView.setHorizontalScrollBarEnabled(false); //橫軸
WebView.setVerticalScrollBarEnabled(false); //縱軸
(2)字體
WebView.getSettings().setDefaultFontSize(value); //value 數值
OR
WebView.getSettings().setTextSize(WebSettings.TextSize.Normal); //TextSize只有5種設定方式(Smallest、Smaller、Normal、Larger、Largest)
2012年11月15日 星期四
(Android Note) 圖片依照螢幕節析度自動調整
1. Introduction
(1) 有時用bitmap會發覺內存溢出導致error,主要是圖片太大才會發生此情況,以下code 可以解決內存溢出問題。
(2)目前android mobile device太多不同的節析度,此code 為了讓圖片可以依照節析度自行縮放。
2. Code
changePictureWH(讀取圖檔, 元件);//getResources().openRawResource(R.drawable.X), 元件
public void changePictureWH(InputStream resources, ImageButton id) {
Bitmap bmp;
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inJustDecodeBounds = true; //不分配空間
bmp = BitmapFactory.decodeStream(resources,null,bfo);
int picWidth = bfo.outWidth; //圖片寬度
int picHeight = bfo.outHeight; //圖片長度
int screenWidth = Define_Variable.scalWidth; //螢幕寬度
int screenHeight = Define_Variable.scalHeight; //螢幕長度
bfo.inSampleSize = 1; //isSampleSize 指圖片縮放程度 = 100/isSampleSize, 值越大圖越小
//根據螢幕的大小和圖片大小計算比例
if(picWidth > picHeight){
if(picWidth > screenWidth) bfo.inSampleSize = picWidth/screenWidth;
}else{
if(picHeight > screenHeight) bfo.inSampleSize = picHeight/screenHeight;
}
//產生經過縮放有像素的bitmap
bfo.inJustDecodeBounds = false; //從新分配空間
bmp = BitmapFactory.decodeStream(resources,null,bfo);
id.setImageBitmap(bmp);
}
(1) 有時用bitmap會發覺內存溢出導致error,主要是圖片太大才會發生此情況,以下code 可以解決內存溢出問題。
(2)目前android mobile device太多不同的節析度,此code 為了讓圖片可以依照節析度自行縮放。
2. Code
changePictureWH(讀取圖檔, 元件);//getResources().openRawResource(R.drawable.X), 元件
public void changePictureWH(InputStream resources, ImageButton id) {
Bitmap bmp;
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inJustDecodeBounds = true; //不分配空間
bmp = BitmapFactory.decodeStream(resources,null,bfo);
int picWidth = bfo.outWidth; //圖片寬度
int picHeight = bfo.outHeight; //圖片長度
int screenWidth = Define_Variable.scalWidth; //螢幕寬度
int screenHeight = Define_Variable.scalHeight; //螢幕長度
bfo.inSampleSize = 1; //isSampleSize 指圖片縮放程度 = 100/isSampleSize, 值越大圖越小
//根據螢幕的大小和圖片大小計算比例
if(picWidth > picHeight){
if(picWidth > screenWidth) bfo.inSampleSize = picWidth/screenWidth;
}else{
if(picHeight > screenHeight) bfo.inSampleSize = picHeight/screenHeight;
}
//產生經過縮放有像素的bitmap
bfo.inJustDecodeBounds = false; //從新分配空間
bmp = BitmapFactory.decodeStream(resources,null,bfo);
id.setImageBitmap(bmp);
}
2012年10月31日 星期三
(Android Note) listview 移置最後一行
1. Code
listview.postDelayed(new Runnable() {
@Override
public void run() {
listview.setSelection(data.size()); //設定移到第幾個item
}
}, 0);
listview.postDelayed(new Runnable() {
@Override
public void run() {
listview.setSelection(data.size()); //設定移到第幾個item
}
}, 0);
2012年10月25日 星期四
(Android Note) Timer 使用方法
1. Code
(1) schedule 用法
schedule(TimerTask task, long delay) // 只執行一次,long delay 延遲時間(單位毫秒)
schedule(TimerTask task, long delay, long period) //重複執行 ,long period 週期多久執行(單位毫秒)
(2)
public class TimerState extends Activity{
Timer mTimer;
public int num;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timerstate);
num = 0;
mTimer = new Timer();
mTimer.schedule( new startTimer() , 0, 1000 ); //第二個參數 0 代表無延遲時間, 第三個參數 單位毫秒
//mTimer.cancel();//暫停
}
//使用schedule方法,必須要有物件繼承imerTask,方可使用
public class startTimer extends TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
num++;
Log.e("num", ""+num);
}
}
}
(Android Note) EditText 編輯觸發事件
1. Code
public class EditTextEvent extends Activity{
EditText eteET;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edittextevent);
eteET = (EditText)findViewById(R.id.eteET);
eteET.addTextChangedListener(eteETListener); //監聽改變文字事件
}
public TextWatcher eteETListener = new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
Toast.makeText(EditTextEvent.this, "afterTextChanged--"+arg0.toString(), Toast.LENGTH_SHORT).show();//顯示修改後字串內容
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
Toast.makeText(EditTextEvent.this, "beforeTextChanged--"+arg0.toString(), Toast.LENGTH_SHORT).show();//顯示修改前字串內容
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
Toast.makeText(EditTextEvent.this, "onTextChanged0--"+arg0.toString(), Toast.LENGTH_SHORT).show();//顯示修改後字串內容
Toast.makeText(EditTextEvent.this, "onTextChanged1--"+arg1, Toast.LENGTH_SHORT).show();//顯示目前第幾個位置,從0開始
Toast.makeText(EditTextEvent.this, "onTextChanged2--"+arg2, Toast.LENGTH_SHORT).show();//none
Toast.makeText(EditTextEvent.this, "onTextChanged3--"+arg3, Toast.LENGTH_SHORT).show();//none
}
};
}
public class EditTextEvent extends Activity{
EditText eteET;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edittextevent);
eteET = (EditText)findViewById(R.id.eteET);
eteET.addTextChangedListener(eteETListener); //監聽改變文字事件
}
public TextWatcher eteETListener = new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
Toast.makeText(EditTextEvent.this, "afterTextChanged--"+arg0.toString(), Toast.LENGTH_SHORT).show();//顯示修改後字串內容
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
Toast.makeText(EditTextEvent.this, "beforeTextChanged--"+arg0.toString(), Toast.LENGTH_SHORT).show();//顯示修改前字串內容
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
Toast.makeText(EditTextEvent.this, "onTextChanged0--"+arg0.toString(), Toast.LENGTH_SHORT).show();//顯示修改後字串內容
Toast.makeText(EditTextEvent.this, "onTextChanged1--"+arg1, Toast.LENGTH_SHORT).show();//顯示目前第幾個位置,從0開始
Toast.makeText(EditTextEvent.this, "onTextChanged2--"+arg2, Toast.LENGTH_SHORT).show();//none
Toast.makeText(EditTextEvent.this, "onTextChanged3--"+arg3, Toast.LENGTH_SHORT).show();//none
}
};
}
(Android Note) 取得手機語系
1. Code
(1) Locale.getDefault().getLanguage()
==>return en, zh ....等
(2) Locale.getDefault().getDisplayLanguage()
==>return English, 中文....等
(1) Locale.getDefault().getLanguage()
==>return en, zh ....等
(2) Locale.getDefault().getDisplayLanguage()
==>return English, 中文....等
2012年10月19日 星期五
(Android Note) 編譯時,出現Conversion to Dalvik format failed: Unable to execute dex: null
1. 說明
常發生編譯時,出現 Conversion to Dalvik format failed: Unable to execute dex: null 訊息,主要是因為加入 JAR 檔時,以 Add External JARs.... 加入;後來搜尋資料,發現以 Add Library/User Library 比較不會有error訊息。
2. 加入User Library 步驟
1. Right-click the project in Eclipse and select "Build Path -> Add Libraries...".
2. Select User Library from the list and click Next.
3. Click the "User Libraries..." button.
4. Click "New..." in the User Libraries dialog.
5. Give the user library a name and select the System library checkbox and click OK.
6. Highlight the newly added user library in the list and click the "Add JARs..." button and add the desired jar files.
7. Click OK on the User Libraries dialog.
8. Make sure the new user library is checked in the Add Library dialog.
常發生編譯時,出現 Conversion to Dalvik format failed: Unable to execute dex: null 訊息,主要是因為加入 JAR 檔時,以 Add External JARs.... 加入;後來搜尋資料,發現以 Add Library/User Library 比較不會有error訊息。
2. 加入User Library 步驟
1. Right-click the project in Eclipse and select "Build Path -> Add Libraries...".
2. Select User Library from the list and click Next.
3. Click the "User Libraries..." button.
4. Click "New..." in the User Libraries dialog.
5. Give the user library a name and select the System library checkbox and click OK.
6. Highlight the newly added user library in the list and click the "Add JARs..." button and add the desired jar files.
7. Click OK on the User Libraries dialog.
8. Make sure the new user library is checked in the Add Library dialog.
2012年10月18日 星期四
(Android Note) 實現全屏方式
1. 在AndroidManifest.xml 文件中,設定Activity為全屏模式。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
2. 程式實現全屏
2.1 隱藏狀態欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
2.2 隱藏標題欄
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
2.3 隱藏工具欄
此處搜尋過,無法強制隱藏工具欄。
PS: 以程式實現全屏,必須'放在 setContentView 前才有效果。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
2. 程式實現全屏
2.1 隱藏狀態欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
2.2 隱藏標題欄
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
2.3 隱藏工具欄
此處搜尋過,無法強制隱藏工具欄。
PS: 以程式實現全屏,必須'放在 setContentView 前才有效果。
(Android Note) 讀取無線網卡mac位置
1. 添加權限
在AndroidManifest.xml加入存取無線網卡狀態權限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允許讀取WIFI狀態 -->
2.code
//讀取無線網卡mac位置
public String getLocalWiFiMacAddress() {
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
return wi.getMacAddress(); //回傳(XX:XX:XX:XX:XX)
}
在AndroidManifest.xml加入存取無線網卡狀態權限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允許讀取WIFI狀態 -->
2.code
//讀取無線網卡mac位置
public String getLocalWiFiMacAddress() {
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
return wi.getMacAddress(); //回傳(XX:XX:XX:XX:XX)
}
2012年10月4日 星期四
(Android Note) webview Javascript使用方法
1. code
String str = "<html><head></head><body>" +
"<button onClick='javascript:js.setJava(\"HELLO\")' >執行java的function做處理</button>" +
"<div id='output'>output:</div>" +
"<script>document.write(js.getJava());</script>" +
"</body></html>";
wv = (WebView)findViewById(R.id.webView1);
wv.addJavascriptInterface(this, "js");
wv.getSettings().setJavaScriptEnabled(true);
wv.loadDataWithBaseURL("about:blank",str, "text/html", "utf-8", null);
public void setJava(String value){
Log.e("HELLO", value);
}
public String getJava(){
return "HELLO";
}
2. 說明
- javascript:js.setJava(\"HELLO\"); //呼叫 java中的程式function
- <script>document.write(js.getJava());</script> //從java中的function取得值
- wv.addJavascriptInterface(this, "js"); // 設定webview和javascript溝通的橋梁,別名js
- wv.getSettings().setJavaScriptEnabled(true); //是否允許webveiw執行javascript代碼
- wv.loadDataWithBaseURL("about:blank",str, "text/html", "utf-8", null); //帶入字串
- wv.loadUrl("http://XXX/aaa.php"); //帶入網址
- wv.loadUrl(file:///android_asset/aaa.html); //帶入檔案,檔案位置必須要放置assets/www目錄下才可。至於大多人說放置assets就可以使用,在下是執行都會錯誤
訂閱:
文章 (Atom)