2014年9月27日 星期六

[android] 抓top activity 名稱


private String getTopActivity() {
        ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        if (am == null) {
            Log.d(TAG,"Go() am = null");
            return null;
        }
        // get the info from the currently running task
        List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);

        //Log.d("topActivity", "CURRENT Activity ::"
        //        + taskInfo.get(0).topActivity.getClassName());

        ComponentName componentInfo = taskInfo.get(0).topActivity;
        //Log.d(TAG, "getPackageName = " + componentInfo.getPackageName());
        return componentInfo.getPackageName();
    }

[android] java code 送touch event

    private void touch(int x, int y) {
        try {
            Runtime.getRuntime().exec("input tap "+x+" "+y);

        } catch (Throwable t) {
        }
    }

[android] service 處理音量鍵

android service 收不到key event.
可以透過 AUDIO_SERVICE

    
public class SettingsContentObserver extends ContentObserver {
        int previousVolume;
        Context context;

        public SettingsContentObserver(Context c, Handler handler) {
            super(handler);
            Log.d(TAG,"SettingsContentObserver()");
            context=c;

            AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            previousVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
        }

        @Override
        public boolean deliverSelfNotifications() {
            Log.d(TAG,"deliverSelfNotifications()");
            return super.deliverSelfNotifications();
        }

        @Override
        public void onChange(boolean selfChange) {
            Log.d(TAG,"onChange()");
            super.onChange(selfChange);

            AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            int currentVolume = audio.getStreamVolume(AudioManager.STREAM_SYSTEM);            
            Log.d(TAG,"onChange() currentVolume = "+currentVolume);
            }
        }
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onCreate()");
        mSettingsContentObserver = new SettingsContentObserver(this,new Handler());
        getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver );        
    }
    @Override
    public void onDestroy() {
        Log.d(TAG,"onDestroy()");
        getContentResolver().unregisterContentObserver(mSettingsContentObserver);
    }

[android] 關於android 手機遊戲外掛

一點小小的想法!
經過實作確定可行!
python + adb command 實作andorid 手機的遊戲外掛

透過python 下adb command 截圖並pull 到電腦端

def getPic():
    os.chdir(adb)
    os.system("adb shell screencap -p /sdcard/screen.png")
    os.system("adb pull /sdcard/screen.png "+pic_dir+"pic.png")
    os.system("adb shell rm /sdcard/screen.png")

接著透過 python PIL lib 做圖形識別
接著對手機送touch event
def touch(x,y):
 os.chdir(adb)
 os.system("adb shell input tap "+str(x)+" "+str(y)) 

優點:
        實作超快! 省時省力
缺點:
        需要開著電腦!

2014年9月26日 星期五

[程式語言] syntaxhighlighter

syntaxhighlighter
可讓程式碼變得更好看
官網: http://alexgorbatchev.com/SyntaxHighlighter/

安裝方式 參考
http://alexgorbatchev.com/SyntaxHighlighter/manual/installation.html


Brush name
Brush aliases
File name
bash, shell
shBrushBash.js
cpp, c
shBrushCpp.js
css
shBrushCss.js
js, jscript, javascript
shBrushJScript.js
java
shBrushJava.js
perl, pl
shBrushPerl.js
php
shBrushPhp.js
py, python
shBrushPython.js
xml, xhtml, xslt, html, xhtml
shBrushXml.js

程式碼用下面語法包起來

<pre class="brush: java">
</pre">


public class Hello {
    public static int gvar;
    public static void say(String s) {
        int x = 10;
        System.out.print(s+x);
    }
    public static void main(String[] argv) {
        float y = 0;
        say("Hello, world\n");
    }
}
<pre class="brush: python">
</pre">

print("Hello, world!") 

2014年7月12日 星期六

[求婚] 關於求婚看板


關於求婚~~~
腦海中一直有一些想法, 想要做一些特別的東西.
翻翻過去的筆記對於單晶片一直很想要玩玩

用一個單晶片 控制LED燈 排成字的形狀~~ 順便求婚!!!
Good idea!!! 於是求婚看板就產生了!

小弟我念資工的會寫一點程式.
對於硬體的電子相關知識有點薄弱.
只好請教google 大師用最基本的東西做出這看板~~
在電路方面真的是土炮搞定他 線路很醜~~

我是寫SW的HW, 只是有時候我也會動手做一下 HW.

====== 製作篇 =======


2014.01.14
    上網找了好久看到這東西!
    Arduino Leonardo 單晶片開發版. 光看到李奧納多 名字就贏了
    對於我這軟體工程師來說 寫C code 這個簡單
    他有多個 IO (5V)  可以控制LED 字型
    而且也很便宜. 就決定是他了.
因為板子上IO 是 5V, LED電路打算用12V

請問google 大師發現繼電器這東西
就入手了一個8路繼電器

2014.01.28
    關於LED, 在台灣一顆要價1~3元不等. 做看板保守估計要三四百棵LED
    加上預留實作失敗的部分, 看來這筆開銷很可觀! 
    在掏寶發現超便宜~~~
    所以一次買了三包 白 藍 紅~~ 各 1000顆!!!!
    平均一包 2XX 台幣. 只能說台灣賣真貴!!!
    

2014_02_01
     開始擬草稿刻字~~~ 美工時間!!!



    阿母表示: 你不是要求婚! 應該要寫 佳圓嫁給我~~~
    HW: 對ㄟ! 可惡! 那個字很難刻ㄟ 要砍掉重練了!!!

2014_02_15
     努力刻字中~~~

    排版中~~

 


    最後拍板定案! 就這個! 

2014_02_16
    因為我超懶惰! 直接用焊槍打洞!! 超臭~~~



    有個雛形了~~~


2014_02_27 求婚看版
    努力焊接中~~~ 焊槍! 電表 鉗子 熱熔膠~~ 好忙! 好忙! 眼睛好花!


    試點燈~~~  成功!!!







    焊了兩三周!!! 終於~~ 完成四個字!
    不得不說! 這LED 超亮~~~

2014_03_08 求婚看板
    最後一個 "嫁" 字!  努力中~~

     完工!!! 電路有點醜! 哈~~~ 不管了!!!

 


     安裝繼電器!!!


     試點燈!!! 測試OK!



 2014_03_15 求婚看版
       今日目標:
       接上 Arduino Leonardo 開發版.
       測試OK! 可以透過寫程式 經由單晶片 控制 板子的亮暗!!! 閃爍!
 
    看板閃爍過於頻繁繼電器似乎被我搞壞
    一直秀逗不知道是不是磁化. 還是不能這樣搞!
    只好放棄閃爍了~~~~
    
    另外! 電源打開後他就開始閃爍感覺就很單調遜遜的!

    為了要能隨心所欲控制看板燈光
    所以這裡在板子上接一個紅外線接收器.
    拿沒有再用的遙控器來遙控看板!




    完工!!!


2014_07_05 求婚看板
    首先有人會問為什麼四個月沒動工! 
    答案: 因為想說還沒要求婚! 完成度也很高了~~~

    因為拿到婚戒了! 也該求婚了~~ 所以開始動工! 
    可惡! 放太久 上面有一層灰塵!!! 哈!!!
            
    電路板固定好了! 遙控的程式也寫好了~~~
    另外多接一個USB 接頭吃單晶片開發版的電
    接 USB抬燈 ~~~ 透過遙控器 讓他閃爍!!!
    求婚時! 只要插上電源! 拿著遙控器 就OK了!!!!


    測試OK!!!



    用了四百多顆LED終於~~~ 完工!!!

2014.07.11

    算算拿到婚戒到現在. 完完全全沒有機會去高雄!
    本想要請女友的好姊妹一起幫忙求婚!
    人算不如天算! 完全沒有時間! 只好全部自己來~~

    在全黑的房間! 看板散發出藍光~~~
    我盡力了! 單眼完全拍不出那個感覺!!!
    用錄影的也錄不出來~~~
    現場看到是清晰 耀眼的字! 還有周圍藍藍的光線!!!   
    燈光美! 氣氛佳~~~


    在測試的時候拍到的!!!
    看板燈光打到人身上就是這感覺~~~
    女友最愛的藍色!!!





    求婚看板 + 玫瑰花束 + 求婚影片 + 鑽戒!

    終於~~~ Yes, I do.