① Android tv版開發代碼中如何取消屏保
1、注冊一個BroadcastReceiver,用於接收ACTION_SCREEN_OFF事件。當接收到這個事件時,打開自定義的屏保畫面。以下代碼為了測試方便,放在MainActivity.java中,也可以根據需要,把代碼放入service中。
registerReceiver(mMasterResetReciever,newIntentFilter(Intent.ACTION_SCREEN_OFF)); BroadcastReceiver mMasterResetReciever=newBroadcastReceiver() { publicvoidonReceive(Context context, Intent intent){ try{ Intent i =newIntent(); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setClass(context, ScreenSaverActivity.class); context.startActivity(i); }catch(Exception e){ Log.i("Output:", e.toString()); } } };
2、完成這一步時,雖然屏幕關閉時,屏保畫面被顯示,但由於接收的是ACTION_SCREEN_OFF事件,所以屏幕已經變黑了,這個時候就需要強制點亮屏幕。
首先,在AndroidManifest.xml中加上permission 許可權:
<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>
以下代碼在ScreenSaverActivity.onCreate中
PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE); mWakeLock = pm.newWakeLock( PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"SimpleTimer");
然後在屏保畫面顯示時,點亮屏幕。在ScreenSaverActivity.onResume中加入
mWakeLock.acquire();
為了能夠在退出屏保時,能夠讓屏幕可以關閉,我們必須釋放WakeLock.故在ScreenSaverActivity.onPause中加入
mWakeLock.acquire();
注意,必須放在onResume中,如放在別的地方。會導致程序無法再次進入屏保,具體原因不詳。由於手頭只有一個手機,不能進行廣泛的測試。
3. 完成第二步後,一般情況下大功告成。按鍵就可以返回程序。但有時候需要點擊屏幕就返回系統。這個時候會發現,無論怎麼樣點擊屏幕,系統都不會有響應,因為此時屏幕已經被鎖定。因此,要實現這個功能,在打開屏保時,需要關鍵屏幕的鎖定功能。
首先,在AndroidManifest.xml中加上permission 許可權:
<uses-permissionandroid:name="android.permission.DISABLE_KEYGUARD"/>
再次,把以下這段代碼加入合適的地方。只要啟動屏保時能夠被調用到
KeyguardManager mKeyguardManager= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); KeyguardLock mKeyguardLock= mKeyguardManager.newKeyguardLock(TAG); mKeyguardLock.disableKeyguard();
當然也可以通過以下代碼開啟屏幕鎖定功能。
② 做Android TV開發,需要用到一個功能,在界面上按 上,右,右三個鍵,開啟大招(啟動另一個a
重新onKeyDown方法。
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER||keyCode == KeyEvent.KEYCODE_ENTER) {
攔截中間鍵按下
}
keyCode == KeyEvent.KEYCODE_DPAD_UP
攔截上鍵按下
keyCode == KeyEvent.KEYCODE_DPAD_DOWN
攔截下鍵按下
keyCode == KeyEvent.KEYCODE_DPAD_LEFT
攔截左鍵按下
keyCode == KeyEvent.KEYCODE_DPAD_RIGHT
攔截右鍵按下
keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0
攔截返回鍵按下
當按下 上下兩鍵時彈出一個popwindow來展示選集,這時彈出來的popwindwo沒有焦點,所以在創建popwindow時就要給它設置獲得焦 點 mSelectionsWindow.setFocusable(true);這樣popwindow里的不管listview還是gridview都能用遙控器上下左右鍵控制了。
可是這時返回鍵失效了,不能退出了,因為焦點都在popwindow上了,給popwindow設置setBackgroundDrawable這樣點擊返回鍵時popwindow就會消失掉。
如果想讓popwindow過個幾秒鍾自己消失,還要重新onKeyUp 撲捉按鍵抬起,在按鍵抬起時給handler發消息就能實現了。
③ android如何在代碼里設置布局
//定義一個線性布局
LindearLayouttp=newLindearLayout(this);
//定義一個布局參數類(用於定義Button在線性布局中的參數)
LayoutParamsltp=newLayoutParams(LayoutParams.WARP_CONTENT,LayoutParams.WARP_CONTENT);
Buttonlbt=newButton(this);
tp.addView(lbt,ltp);//將內Button加入到線性布局中。
//但是容不推薦代碼里實現,因為android是MVC開發模式,數據操作,UI,代碼等實現都是分開寫的,這樣寫的好處你多編點代碼就會體會到了。雖然靠純代碼甚至是在一個activity中都可能完成一個app的編寫,但是這樣就完全沒了可維護性了