編輯:Android開發實例
1.模式解讀
生活在深圳這所高速發展的城市,高樓大廈林立。所謂萬丈高樓平地起,在我們感慨樓層的高聳之外,更要配服樓層的建造者和設計者。大樓首先得打穩地基、搭建骨架,再由下往上一層層蓋上去。而這樣的架構從程序的設計模式來說有個專用名詞叫:Builder。
2.場景模擬
由一個固定的建築材料“固定的字符串”,然後將這些建築材料組合拼裝,按照樓層的需要建造不同的大樓層,如:商務層、購務層、停車層等“組合拼裝字備份域控制器串”。
運行效果如下:
3.功能演示
測試程序結構圖如下:
UML圖中,共有四個類:
Builder 抽象類:不含實際處理內容,僅聲明抽象方法。
Director 類:負責產生文件的類
TextBuilder 類:產生一般文件格式文件
HtmlBuilder 類:產生HTML格式文件
Builder 抽象類
/**
* 聲明產生“文件”的所有方法的抽象類。
*
* @author Administrator
*
*/
public abstract class Builder {
public abstract void makeTitle(String title);//產生文件中的標題
public abstract void makeString(String str); //產生文件中的字符串
public abstract void makeItems(String[] items); //產生文件中的項目
public abstract Object getResult(); //取得完成文件的方法
}
Director 類
public class Director {
private Builder builder;
/**
* 傳入Builder 的子類對象
* @param builder
*/
public Director(Builder builder) {
this.builder = builder;
}
/**
* 建立 文件
* @return
*/
public Object construct(){
builder.makeTitle("terry");
builder.makeString("android developer");
builder.makeItems(new String[]{"Framework","java","native","HAL","Service"});
builder.makeString("windows phone 7 developer");
builder.makeItems(new String[]{"for silverlight","XNA"});
return builder.getResult();
}
}
查看文件
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
可以找到R.integer.def_screen_off_timeout的定義。
<integer name="def_screen_off_timeout">60000</integer>
發現默認值為60000ms,也就是60s。我們只需要把這個參數改為-1。然後重新編譯SettingsProvider模塊,就OK了。
另外為了防止用戶進入系統後,修改鎖屏時間,在Setting模塊中刪除對鎖屏時間的設置。這樣Android設備就永不鎖屏了。
鎖屏的代碼在LockScreen.java中,可以設置鎖屏功能開關的位置。代碼位於:frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java
該文件中有一個變量定義如下:
/**
* External apps (like the phone app) can tell us to disable the keygaurd.
*/
private boolean mExternallyEnabled = true;
mExternallyEnabled是用來管理是否開啟屏幕鎖的關鍵。默認值是打開屏鎖,根據注釋可以知道他是希望應用程序來修改這個值。但是經過加打印信息發現開機的時候沒有任何應用程序會修改它。修改這個值調用如下函數:
/**
* Same semantics as [email protected] WindowManagerPolicy#enableKeyguard}; provide
* a way for external stuff to override normal keyguard behavior. For instance
* the phone app disables the keyguard when it receives incoming calls.
*/
public void setKeyguardEnabled(boolean enabled) {
synchronized (this) {
if (DEBUG) Log.d(TAG, "setKeyguardEnabled(" + enabled + ")");
mExternallyEnabled = enabled;
if (!enabled && mShowing) {
if (mExitSecureCallback != null) {
if (DEBUG) Log.d(TAG, "in process of verifyUnlock request, ignoring");
// we're in the process of handling a request to verify the user
// can get past the keyguard. ignore extraneous requests to disable / reenable
return;
}
// hiding keyguard that is showing, remember to reshow later
if (DEBUG) Log.d(TAG, "remembering to reshow, hiding keyguard, "+ "disabling status bar expansion");
mNeedToReshowWhenReenabled = true;
hideLocked();
} else if (enabled && mNeedToReshowWhenReenabled) {
// reenabled after previously hidden, reshow
if (DEBUG) Log.d(TAG, "previously hidden, reshowing, reenabling "+ "status bar expansion");
mNeedToReshowWhenReenabled = false;
if (mExitSecureCallback != null) {
if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting");
mExitSecureCallback.onKeyguardExitResult(false);
mExitSecureCallback = null;
resetStateLocked();
} else {
showLocked();
// block until we know the keygaurd is done drawing (and post a message
// to unblock us after a timeout so we don't risk blocking too long
// and causing an ANR).
mWaitingUntilKeyguardVisible = true;
mHandler.sendEmptyMessageDelayed(KEYGUARD_DONE_DRAWING,KEYGUARD_DONE_DRAWING_TIMEOUT_MS);
if (DEBUG) Log.d(TAG, "waiting until mWaitingUntilKeyguardVisible is false");
while (mWaitingUntilKeyguardVisible) {
try {
wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
if (DEBUG) Log.d(TAG, "done waiting for mWaitingUntilKeyguardVisible");
}
}
}
}
經過上面的討論我們可以發現我們有兩個解決方法:
1、定義變量的時候,給其初始化為false。
2、在launcher模塊啟動的時候,調用setKeyguardEnabled方法,關閉鎖屏功能。
一般使用過UCWEB-Android版的人都應該對其特殊的menu有一定的印象,把menu做成Tab-Menu(支持分頁的Menu),可以容納比Android傳統
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
本文給大家帶來一個很實用的小控件ClearEditText,就是在Android系統的輸入框右邊加入一個小圖標,點擊小圖標可以清除輸入框裡面的內容,IOS上面直接
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放