Android取得裝置的語言
裝置語言取得如下
# get(0)為第一語言、get(1)為第二可能使用的語言
Resources.getSystem().getConfiguration().getLocales().get(0)
#輸出
zh-Hans-CN
zh-Hant-TW
還有一種方式,但比較不精準
#中國與台灣一律為zh
Locale.getDefault().getLanguage()
裝置語言取得如下
# get(0)為第一語言、get(1)為第二可能使用的語言
Resources.getSystem().getConfiguration().getLocales().get(0)
#輸出
zh-Hans-CN
zh-Hant-TW
還有一種方式,但比較不精準
#中國與台灣一律為zh
Locale.getDefault().getLanguage()
API 31(含)以後,寫法變了,
https://developer.android.com/reference/kotlin/android/net/wifi/WifiManager#getConnectionInfo()
照著官方這樣寫,似乎還是無法取得連線資料,須加上 FLAG_INCLUDE_LOCATION_INFO 才行。
WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
final NetworkRequest request = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build();
ConnectivityManager connectivityManager = activity.getSystemService(ConnectivityManager.class);
ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback(FLAG_INCLUDE_LOCATION_INFO) {
@Override
public void onAvailable(Network network) {}
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
WifiInfo wifiInfo = (WifiInfo) networkCapabilities.getTransportInfo();
String aConnectedWifiSSD = wifiInfo.getSSID().toLowerCase();
Log.d(TAG,"wifiInfo="+wifiInfo);
connectivityManager.unregisterNetworkCallback( this);
}
};
if( wifiManager.isWifiEnabled() ) {
connectivityManager.requestNetwork(request, networkCallback); // For request
connectivityManager.registerNetworkCallback(request, networkCallback); // For listen
}
# 需要的權限
android.Manifest.permission#ACCESS_FINE_LOCATION
android.Manifest.permission#ACCESS_WIFI_STATE
開發android都知道,要顯示視窗訊息,不是那直覺方便的,需要搭配Handler參與才能走得順。
# 原本以為myAlterDialog.show()後,就可以馬上執行其他程式商業邏輯,完成後停掉myAlterDialog即可
# (例如我們要實現APP「顯示"請稍後",然後背景執行其他程式商業邏輯,執行完取消"請稍後"」)
# 但我沒想到程式商業邏輯需要寫在Handler裡面才不會讓卡住。
public class MainActivity extends AppCompatActivity {
AlertDialog.Builder waitBuilder = null;
AlertDialog waitDialog;
...
protected void onCreate(Bundle savedInstanceState) {
...
waitBuilder = new AlertDialog.Builder(activity);
waitBuilder.setCancelable(false);
waitBuilder.setView(R.layout.loading_dialog);
myAlterDialog = waitBuilder.create();
}
public void onStart() {
adapter.setOnItemLongClickListener(.....){
...
runOnUiThread(new Runnable() {
@Override
public void run() {
myAlterDialog.show();
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
...
Toast.makeText(activity,"success"....
myAlterDialog.dismiss();
}
});
}
}, 300);
}
}
...
});
});
}
2011年第一隻android app有數萬下載量,到2019年我又練習寫了一個「GIT文字筆記」,是個「麻瓜勿擾的APP」。
該APP有開源,久了我也幾乎忘了有這,最近收到app要改目標版本,否則要下架,於是我更新時,再加碼限制android 13或以上才能安裝使用;
果然幾乎沒人用,到目前只有50+下載 XD
我這APP也很奇葩,用git shallow減少clone下載版本量呢。
https://play.google.com/store/apps/details?id=inmethod.gitnotetaking
年紀一大把了,還在搞Acess,慘
你可以存取的(u can access),到此下載
解開後,除了本體ucanaccess-xxx.jar外,在lib目錄下的jar檔也需要。
其中存取access的關鍵jackcess-xxx.jar (目前最新版4.0.6),可另外下載取代ucanaccess內建的3.0.1版本
JDBC Connection String
jdbc:ucanaccess://c:/xxx.mdb;memory=false
公司希望Android撰寫的測試程式移植到windows平台上,但是這樣做很耗時,程式要重新開發; 因此我想到讓筆電或電腦桌機能夠直接執行android, 這樣就能解決問題了。
我排除已知的解決方案之一-Android模擬器、windows 11模擬andorid不考慮(因為要停用了)。
最後我希望類似chrome book 使用chrome OS直接支援android 的方式,沒想到還真的找到了 –FydeOS
安裝FydeOS有些眉角要注意的:
真真氣死人,也不知什麼原因,搞了快兩天,後來發現不要減肥,上架就ok了
後續我推測使用自己的java library,系統納入時判斷錯誤,刪去一些應該納入的函式,導致使用時出現invoke virtual method錯誤
minifyEnabled false
shrinkResources false
原來不是這麼簡單
private static final String[] VALID_IP_HEADER_CANDIDATES = { "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_X_CLUSTER_CLIENT_IP", "HTTP_CLIENT_IP", "HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "REMOTE_ADDR" }; public static String getClientIpAddress(HttpServletRequest request) { for (String header : VALID_IP_HEADER_CANDIDATES) { String ipAddress = request.getHeader(header); if (ipAddress != null && ipAddress.length() != 0 && !"unknown".equalsIgnoreCase(ipAddress)) { return ipAddress; } } return request.getRemoteAddr(); }
我們從github拉乾貨下來的時候,一般只有兩種方式,一種是直接下載zip檔案,另一種是克隆;這兩種方式差在克隆可以全部版都(甚至連分支branch)都有,而下載只有最新版的檔案,不含其他版本。
這裡介紹第三種方式,克隆指令加上–bare
git clone --bare <git http url>
會出現原始版本紀錄,但不會出現檔案.
未加–bare
我因為系統設計需要寫程式,只需抓出專案標籤名稱以及該標籤所屬的所有檔案名稱,但不需要使用實際檔案;考慮jgit函式庫還是需要克隆下來才能做事情,但我又不需要把真的檔案都拉下來,因此選擇–bare的方式拉貨,就能達到我的目標了。
好久沒寫java程式了,最近要寫「機構3D圖git版控」之後整合程式,編譯沒問題,在eclipse執行時居然出現這個錯誤
Error occurred during initialization of boot layer java.lang.module.ResolutionException: Modules xxx and yyy export package zzz to module kkk.web
原來是有些jar檔案,並不是使用module方式,但是設定卻在module裡面,只要將該jar檔案從「Modulepath」移到「Classpath」就好了。