2017年5月21日 星期日

[工作] 在Android上如何確認你的裝置有連外的能力

在Android上, 我們可能會用ConnectivityManager來檢查連線狀態:
public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnectedOrConnecting();
}
 
這只能檢查Android device是否有連線到AP, 卻不能知道是否有對外連線的能力.
 
想要檢查現在裝置是否能對外連線, 目前找到兩種方式:
1. 用ping檢查
public boolean isOnline() {
    Runtime runtime = Runtime.getRuntime();
    try {
        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int     exitValue = ipProcess.waitFor();
        return (exitValue == 0);
    }
    catch (IOException e)          { e.printStackTrace(); }
    catch (InterruptedException e) { e.printStackTrace(); }

    return false;
}
 
2. 連線至DNS檢查  
public boolean isOnline() {
    try {
        int timeoutMs = 1500;
        Socket sock = new Socket();
        SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53);

        sock.connect(sockaddr, timeoutMs);
        sock.close();

        return true;
    } catch (IOException e) { return false; }
}
 
來源參考:
http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-times-out
 

2017年5月20日 星期六

[工作] Windows10版docker安裝路徑更改

我的Windows10是Home Edition的,

所以只能安裝Docker tool

首先在還沒開始安裝之前, 需要先設定以下環境變數.

MACHINE_STORAGE_PATH
DOCKER_CERT_PATH
路徑設為你要安裝的地方.

然後再開始安裝docker tool, 就ok了

2017年3月26日 星期日

[工作] shell script加減乘除

在shell script計算加減乘除的方式, 可以用expr

#!/bin/sh

VALUE=100
VALUE=`expr $VALUE - 10`
echo "After minus: $VALUE"

VALUE=`expr $VALUE + 10`
echo "After plus: $VALUE"

VALUE=`expr $VALUE / 10`
echo "After divide: $VALUE"

VALUE=`expr $VALUE * 10`
echo "After multiply: $VALUE"
執行結果:
After minus: 90
After plus: 100
After divide: 10
After multiply: 100

不過在Android上, 會發生找不到expr的錯誤
所以要改用下面的方式

#!/bin/sh

VALUE=100

VALUE=$((VALUE - 10))
echo "$VALUE after minus"

VALUE=$((VALUE + 10))
echo "$VALUE after plus"

VALUE=$((VALUE / 10))
echo "$VALUE after divide"

VALUE=$((VALUE * 10))
echo "$VALUE after multiply"

執行結果:
90 after minus
100 after plus
10 after divide
100 after multiply

2017年3月21日 星期二

[工作] vim修正Windows換行符號,並移除空白行

在vim中可以下
:set ff=unix
將格式改成unix的檔案格式(原本ff=dos)

並且
:g/^$/d
可將開頭為空白的行刪除

2017年2月15日 星期三

[工作] Android Studio 從舊專案建立新專案並改名

1. 手動複製舊專案到新資料夾並改名
2. AndroidManifest.xml
  將package改成你要的名字
3. app裡build.gradle
  application改成你新的package name
4. 在檔案右鍵Refactor -> Rename改成新的package name

2017年1月12日 星期四

[工作] Kernel driver發uevent的方法

方法很單純,就是把你想要發的event包一包發出去。

    char event[20];
    char *envp[] = { event, NULL };

    sprintf(event_string, "STAND_EVENT=undock");
    kobject_uevent_env(&dev->kobj, KOBJ_CHANGE, envp);