2017年11月27日 星期一

[Android] 手機備份

大約在十月左右,我的 Asus 手機 Home 鍵 跟 分頁鍵點了沒反應,
只剩下 Back 鍵能使用….
開發者模式整個不能使用。
最慘的是連到 Google play 安裝 App,
安裝的進度條完全不會走,App 安裝不起來。
當我差點以為要換手機時,
其實發現 Home 跟 分頁這兩個鍵按了裝置是有被觸及的反應,
但是就是沒實現功能,所以我懷疑是系統軟體 BUG,

2017年11月19日 星期日

[Android] 一人Android開發之道

今天看到一篇頗有共鳴的文章,
討論如果在公司只有你一個人是Android developer時,
要怎麼存活下去。
其實這篇有人翻譯了,網路上找的到,
所以我挑重點說+我的看法。

2017年10月26日 星期四

[Android] Webview 注意點

年底清倉。
估計六月開始認真看 webview,
以前都是url放進去就算了
  • Android 4.4 新增 evaluateJavascript call back方式的寫法(UI thread),
    之前的OS版本使用 @JavascriptInterface 和 addJavascriptInterface(background thread)
    那,如果target version升級到N,用 loadUrl 去call javascript function,在他之前的global變數跟fuctions會失效。
  • webview 的css font-family是可以自訂的。
    想叫 font-family: “GG” 也沒差
    但 src 的 來源要正確。ttf 副檔名的字形 load 出來的速度比較快。

1
2
3
4
@font-face {
font-family: "MeQuaran";
src: url('me_quaran.ttf');
}

  • webview 裡的內嵌影片全螢幕要自己蓋view給它(它能不能翻轉又跟著activity,嘖),寫在 WebChromeClient class onShowCustomView 和 onHideCustomView,如果不 override 那兩個 method,webview的影片播放bar會自己隱藏全螢幕的icon。
  • 掛上 video html tag 會發現下面的播放bar不顯示,要加上controls
    但是iframe就不需要。嵌video tag 靈活度比較大,可以控制它播放事件。

2017年10月22日 星期日

[Android] 監聽軟鍵盤方式

年前做的功能遇到問題,年尾來清倉。
因為製作的view比較複雜,是個LinearLayout包著EditText和Textview,
需要做鍵盤出現某個複合的view被頂上來的功能。
必須監聽軟件盤出現的時間點。
  • adjustPan 這個很好用,但因為我的Textview擺在EditText下面,會發現被頂上來的只有EditText
  • android:windowSoftInputMode="adjustresize"
    這個只適合你的view在最下面的情況才會頂上來,萬一view在中下方(非底部)也是不會頂上來。
  • 既然要做到複合view鍵盤打開,
    要判斷他是否被蓋到,如果蓋到,則頂上來,沒蓋到,則不動。
    只能自己算view移動的位置。還好需要頂上來的view是跟著listview,
    只需要抓listview item高度、畫面高度、複合view高度去算移動位置。
    但必須要監聽到軟鍵盤打開事件才能算高度。
  • 最初找到覺得比較好的解法可能是在 onConfigurationChanged 寫軟鍵盤事件,
    但其實真的寫了發現根本沒用。
    https://stackoverflow.com/questions/24388492/listen-for-keyboard-show-or-hide-event-in-android
  • 就只剩用 addOnGlobalLayoutListener 抓事件,我是覺得不太好,
    因為萬一是其他因素導致布局改變,可能無法精準抓到鍵盤事件。
Code:

1
2
3
4
5
6
7
8
9
10
11
12
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
view.getWindowVisibleDisplayFrame(r);
if (view.getRootView().getHeight() - (r.bottom - r.top) > 500) { // if more than 100 pixels, its probably a keyboard...
onKeyboardShow();
} else {
onKeyboardHidden();
}
}
});

2017年10月20日 星期五

[Android] 在Google play 上 把 Android APP 去掉 專為手機設計 標籤

Google play上架都會過濾掉一些裝置,
假設為平板 & 手機皆支援的app則需要注意此眉角。
1
2
3
4
5
6
7
8
此外,在發行之前,請確保您的應用程式已通過基本技術檢查並符合推出條件,例如:
* 以相應的 Android 版本為目標
* 正確指定硬體相依性
* 宣告對相應螢幕的支援
* 使用提供的所有螢幕空間
* 將螢幕擷取畫面上傳至 Google Play
最容易漏掉的是”正確指定硬體相依性”,
有些硬體配件是有手機有,平板沒有,很容易忽略,
需要在 manifest.xml 設定 uses-feature 把他的硬體元素設定為非必要。
use-feature
1
2
* 與此類似,請檢查宣示說明中是否存在表示對不適用於平板電腦的硬體功能有需求的 <permission> 元素。若您發現此類許可,請確保明確宣告這些功能的對應 <uses-feature> 元素,並納入 android:required=”false” 屬性。

官方這句很容易被誘導到permission那邊的硬體,但也可能是其他硬體造成
不要信,不然又傻傻的上傳上去play store,一次傳慢則四小時才會在架上看到。
請以自己的App有什麼硬體功能的方向找。

2017年10月17日 星期二

快速從 Kotlin 切換到 Python 之三秒記憶

最近早上寫kotlin,看java debug,阿,還有html css javascript……..Orz
晚上切換python,單純給三秒記憶的人看。
小小整理了一點注意點
表格kotlinpython
methodfundef
參數型態冒號放後面(test:Int)不需要
return放函式後面(fun xxx():Int)不需要
函式需要大括號起頭冒號+之後都四個空格
判斷式false , !False , not
字串包含if(xx.contain(‘x’))if ‘x’ in xx :
命名駝峰式小寫加底線
字串換行直接換行用斜線解決
字串IDE自動切成”a”+”b”“a”\”b”
  • python還有一個注意點,如果要取全域變數,
    要在fuction裡面先
    global <全域變數名稱>
    在做相關操作,不然會找不到該變數
  • python3 多了 async 跟 await
    async是協程(coroutine),丟進Loop讓其進行,他不能直接執行,
    為的是不讓線程block住,則靠await把控制權讓出來
    這個實在寫的很易懂,茅塞頓開
    http://www.jianshu.com/p/b5e347b3a17c
  • discord的python框架之所以用 async 跟 await 我也能夠理解了,
    Bot必須等user下指令所相應的操作,
    也可能同時有很多user訊息進來要處理,異步是需要的。

2017年10月12日 星期四

[Python] 如何開發 Discord 機器人並且部屬至 Heroku



Discord是為了遊戲而生的通訊軟體,
他除了語音及聊天室,頁面簡單無廣告,帳號容易註冊,
支援markdown語法,訊息永久保存,
最大的賣點我想莫過於機器人替群組增添了很多樂趣XD
為鼓勵更多人開發相關discord 機器人,而且discord中文資源非常稀少,
所以來寫教學囉~