2013年9月30日

Andorid─AlertDialog操作方式

Android 的 AlertDialog 可以顯示訊息,還可以顯示列表,甚至可以是一個xml
也就是說,可以在layout編輯器裡新增一個表單(XML),裡可以放文字物件,EDITTEXT物件,按鈕物件,然後於AlertDialog 上顯示出來。


1.呼叫最基本的對話方塊(AlertDialog)

程式碼如下:
private void ShowAlertDialog()
{
 Builder MyAlertDialog = new AlertDialog.Builder(this);
 MyAlertDialog.setTitle("我是標題");  //設定dialog顯示標題
 MyAlertDialog.setMessage("顯示的內容");  //設定dialog顯示的內容
 MyAlertDialog.show();  //顯示dialog
}

2.如果要在對話方塊裡加入Button
程式碼如下:
private void ShowMsgDialog(String Msg)
{
 Builder MyAlertDialog = new AlertDialog.Builder(this);
 MyAlertDialog.setTitle("我是標題");  
 MyAlertDialog.setMessage("顯示的內容");  
 DialogInterface.OnClickListener OkClick = new DialogInterface.OnClickListener()
 {
public void onClick(DialogInterface dialog, int which) {
 //點選按鍵,所要執行的事情,如果沒有加程式碼,則會關閉dialog
}
 };
 MyAlertDialog.setNeutralButton("OK",OkClick );  //加入OK按鍵
 MyAlertDialog.show();  //顯示dialog
}

3.如果要在對話方塊裡加入多個按鈕
程式碼如下:
private void ShowMsgDialog(String Msg)
{
 Builder MyAlertDialog = new AlertDialog.Builder(this);
 MyAlertDialog.setTitle("我是標題");  
 MyAlertDialog.setMessage("顯示的內容");  
 MyAlertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
     //按下按鈕時顯示快顯
     Toast.makeText(MainActivity.this, "您按下OK按鈕", Toast.LENGTH_SHORT).show();
     }
   });
 MyAlertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
     //按下按鈕時顯示快顯
     Toast.makeText(MainActivity.this, "您按下Cancel按鈕", Toast.LENGTH_SHORT).show();
   }
 });
 MyAlertDialog.show();  //顯示dialog
}

4.要在對話方塊的內容套入xml的layout格式
程式碼如下: 
 View layout = inflater.inflate(R.layout.uninstall_noti_scollbar, null);
 MyAlertDialog.setView(layout); //將layout置入AlertDialog內

參考連結
參考連結

2013年9月26日

Android─透過adb 修改日期

只要輸入下面的指令

adb shell date -s 2013925.130155

則系統時間會被設定為 2013年9月25號 13:01:55


參考網址

2013年9月17日

Android ─ 透過Bitmap縮小圖片

在修改Android Setting時,有時候想要修改顯示的圖片大小,但是又不想要更動原本Setting裡的layout配置。
我所採用的方式是,透過Bitamp來達到縮放icon的大小

步驟
1.先將icon圖檔讀入到bitmap
2.設定要縮放的比例
   比例算法:用新圖檔的長高/原始圖檔的長高
3.建立一個新的Martix,利用postScale設定Martix的比例
   參考網址
4.接著建立新的bitmap,透過createBitmap將原圖及Maritx等參數加入,即可建立新的被resize的      bitmap
   參考網址
5.將resize的bitmap加入到BitmapDrawable
6.最後將BitmapDrawable ,透過setImageDrawable加入到imageview去顯示

依照上去步驟,可以減少調整原先setting layout的設置,達到縮放icon的效果

程式碼如下

ImageView indicatorView = new ImageView(getContext());
   
//for resize icon
Bitmap bmp = BitmapFactory.decodeResource(getContext().getResources(), 
R.drawable.ic_tab_common_setting);
int oldwidth = bmp.getWidth();
int oldheight = bmp.getHeight();
Log.i("Alex","SettingManager====>bmp size is :"+oldwidth+","+oldheight);
float scaleWidth = 51 / (float)oldwidth;
float scaleHeight = 51 / (float)oldheight;
Log.i("Alex","SettingManager====> set scale value : "+scaleWidth + ":" + scaleHeight);
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// create the new Bitmap object
Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0, oldwidth,oldheight, matrix, true);
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
indicatorView.setBackgroundResource(R.drawable.bg_tab_title);
indicatorView.setImageDrawable(bmd);



其他參考網頁1
其他參考網頁2

2013年9月11日

Android─偵測網路連線狀態by ConnectivityManager

Android 手機,目前是否連上網路,是用哪種方式連上網路,wifi or 行動網路,現在網路是不是在漫遊中,我們都可以透過ConnectivityManager這個class取得相關的資訊

要判斷wifi或者行動網路是否有連線
首先要先加入權限

再使用下面程式碼

ConnectivityManager manager = (ConnectivityManager) 
getSystemService(CONNECTIVITY_SERVICE);
//For Data network check
boolean is3g = 
manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
//For WiFi Check
boolean isWifi = 
manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

is3g true 代表行動網路有連線  false代表沒有

isWifi true 代表wifi有連線 false代表沒有

若想要知道網路的相關狀態
我們可以使用

ConnectivityManager CM = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = CM.getActiveNetworkInfo();

而當中要注意到的地方, 是在 NetworkInfo 這段, 倘若你的手機目前不在網路的服務範圍, 也就是說沒有任何方式可以連出去網路 則 CM.getActiveNetworkInfo() 取回的 Reference 會是 Null, 忘了做此判斷的話, 手機則會立刻罷工給你看 (NullPointerException) 而比較常見需要取得的資料如下:

info.getTypeName();     // 目前以何種方式連線 [WIFI]
info.getState();        // 目前連線狀態 [CONNECTED]
info.isAvailable();     // 目前網路是否可使用 [true]
info.isConnected();     // 網路是否已連接 [true]
info.isConnectedOrConnecting(); // 網路是否已連接 或 連線中 [true]
info.isFailover();      // 網路目前是否有問題 [false]
info.isRoaming();       // 網路目前是否在漫遊中 [false]

如果要偵測網路狀態改變
我們可以用一個BroadcastReceiver去監聽action
android.net.conn.CONNECTIVITY_CHANGE

android.net.wifi.WIFI_STATE_CHANGED
如此就可以得知手機的連線狀態改變

參考網址:
http://wp.me/pCXXH-2Q
http://goo.gl/Ve9SnY
http://viralpatel.net/blogs/android-internet-connection-status-network-change/
http://developer.android.com/reference/android/net/NetworkInfo.html

2013年9月5日

Android─Dialog顯示時,不能按home與back button及dialog以外的區域

當Dialog顯示時,如果不想要使用者關閉dialog
我們可以利用下面的程式碼,來達成此目的

dialog = new AlertDialog.Builder(mContext)
    .setTitle(title)
    .setMessage(message)
    .setPositiveButton(buttonTxt, listener)
    .create();
    dialog.setCanceledOnTouchOutside(false); // disable click home button and other area
    dialog.setCancelable(false);  // disable click back button

setCanceledOnTouchOutside  

設為true為可以點選dialog以外範圍的區域,false則是不行

setCancelable

設為true為可以點選back button,false則是不行

參考網頁
http://goo.gl/IkGCpQ
http://goo.gl/pjzyuc

Android─利用BroadcastReceiver接收wifi與bluetooth狀態變化

當app需要知道wifi bluetooth狀態被切換時,
我們可以透過BroadcastReceiver來監聽 wifi 與 bluetooth 的狀態
首先我們需要在onresume的狀態下去註冊wifi 與 bluetooth 狀態改變所發出的Broadcast事件
程式碼如下

@Override
public void onResume() {
    super.onResume();
    filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); \\bluetooth狀態改變事件
    filter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); \\wifi狀態改變事件
    registerReceiver(mReceiver, filter);
}

當我們註冊完所要監聽的Broadcast事件後,我們就可以利用BroadcastReceiver來監聽註冊的事件。
程式碼如下
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED))  //收到bluetooth狀態改變
        {
          //執行想做的程式碼
        }
        else if((action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION))  //收到wifi狀態改變
        {
          //執行想做的程式碼
        }
    }
};// end of OnReceive

Android─ToggleButton 開關簡述

XML宣告

<togglebutton android:id="@+id/tb_wifi" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="ToggleButton">
</togglebutton>

<togglebutton android:id="@+id/tb_bt" 
android:layout_aligntop="@+id/tv_bt" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="ToggleButton">


IMPORT

import android.widget.ToggleButton;
import android.widget.CompoundButton;

CODE

private ToggleButton wifi_tb = (ToggleButton) findViewById(R.id.tb_wifi);
private ToggleButton bt_tb = (ToggleButton) findViewById(R.id.tb_bt);
wifi_tb.setOnCheckedChangeListener(listener);
bt_tb.setOnCheckedChangeListener(listener);

判斷togglebutton開關狀態

CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
@Override
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
        if (isChecked) //ToggleButton on
        {
     switch (buttonView.getId()) //判斷哪個ToggleButton被選取
            {
         case R.id.tb_wifi:
                    //選取後要做的事情
      break;
  case R.id.tb_bt:
                    //選取後要做的事情
      break;
     }
 }      
        else //ToggleButton on
        {
     switch (buttonView.getId()) //判斷哪個ToggleButton被選取 
            {
  case R.id.tb_wifi                   
                     //取消後要做的事情
                    break;
        case R.id.tb_bt: 
                    //取消後要做的事情
     break;  
      }
 }
    }
};


參考連結

http://goo.gl/rgs3Dh
http://goo.gl/5qrzZe

Android─開啟wifi與bluetooth及偵測wifi與bluetooth狀態

Wifi開啟及狀態偵測

首先需要在Manifest.xml 加入以下三個permission





然後在程式內加入

private WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE)
if (wifiManager.isWifiEnabled()) //判斷目前wifi狀態 開啟會回傳true
    wifiManager.setWifiEnabled(false);   //把wifi關閉
else
    wifiManager.setWifiEnabled(true); //把wifi開啟

bluetooth開啟及狀態偵測

首先需要在Manifest.xml 加入以下兩個permission

然後在程式內加入

private BluetoothAdapter mBluetoothAdapter  = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter.isEnabled())\\判斷目前bluetooth狀態 開啟會回傳true
    mBluetoothAdapter.disable();  //將bluetooth關閉
else
    mBluetoothAdapter.enable();  //將buletooth開啟

參考網頁
http://goo.gl/A6anzN 
http://goo.gl/11Qi7Y 
http://goo.gl/Slssm 
http://goo.gl/xgLsp

Android─保持不休眠狀態

在Android上,要讓你的app避免進入休眠模式
有兩種方式可以使用

第一種是在Manifest.xml文件裡加入user-permission

  • <uses-permission android:name="android.permission.WAKE_LOCK">

第二種是直接在所執行的Activity中加入程式碼

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

上述程式碼需
加在 setContentView(R.layout.activity_network_testing);   setview的程式碼之前