編輯:關於Android編程
則在此標簽下的所有Activity中,都可以用MyApplication myApplaction = (MyApplication) getApplication();來獲取MyApplication的實例並使用或修改其中的變量了。android:name="barry.demo.passwordApp.MyApplication"
由於onResume()方法是Activity每次顯示或者重繪都會調用的方法(見Activity的生命周期),所以可以在此方法中進行狀態判斷。
具體做法可以是:
寫一個用於輸入密碼的界面PasswordActivity;
寫一個BaseActivity,在其中的onResume()方法中寫入判斷代碼,然後其余所有Activity都繼承自此BaseActivity——當然,密碼界面PasswordActivity除外。
BaseActivity大概長這個樣子:
public class BaseActivity extends Activity {
MyApplication myApplaction;
protected void onResume() {
super.onResume();
myApplaction = (MyApplication) getApplication();
if (myApplaction.isLocked) {//判斷是否需要跳轉到密碼界面
Intent intent = new Intent(this, PasswordActivity.class);
startActivity(intent);
}
};
}
PasswordActivity大概長這個樣子:
public class PasswordActivity extends Activity {
MyApplication myApplaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_password);
myApplaction = (MyApplication) getApplication();
final EditText editTextPassword = (EditText) findViewById(R.id.editTextPassword);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String password = editTextPassword.getText().toString();
if (password != null && password.equals(myApplaction.password)) {
Toast.makeText(PasswordActivity.this, "密碼正確!", Toast.LENGTH_SHORT).show();
myApplaction.isLocked = false;
PasswordActivity.this.finish();
} else {
Toast.makeText(PasswordActivity.this, "密碼錯誤!", Toast.LENGTH_SHORT).show();
editTextPassword.setText("");
}
}
});
}
}經過以上兩步,就可以實現應用的加鎖了——在打開的應用的時候,就會自動跳轉到密碼界面,輸入密碼之後再進入內容Activity。——但是這只會在程序打開的時候輸入一次密碼,如果程序沒有徹底關閉,那麼把手機鎖屏之後再打開,依然還是不需要輸入密碼。
要實現在手機鎖屏之後再打開就要求密碼,就必須要監聽手機的鎖屏事件了,在鎖屏之後把應用狀態改為鎖定,這樣再打開就會重新要求輸入密碼了。
諸如系統開機、鎖屏、開屏、聯網狀態改變、有電話進來、有短息進來、系統電量過低等等,各種系統狀態發生改變的時候,Android系統本身都會發一個廣播。
我們要做的,就是要注冊一個廣播接受器,用其監聽系統廣播,當發現有鎖屏事件發生的時候更改應用的狀態。
由於這個廣播接受器應該是啟動應用時就創建的,而且是屬於應用全局的,所以我們把它創建在MyAppLication類中,在MyApplication的onCreate()方法中進行初始化,在onTerminate()方法中取消注冊。
構建一個廣播接受器很簡單,只需要繼承android.content.BroadcastReceiver類,並且實現其中的onReceive()方法就好,在onReceive()中做接到廣播之後的處理。
class LockScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/* 在這裡處理廣播 */
if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
isLocked = true;//把應用狀態設為鎖定
}
}
}
構建一個IntentFilter過濾器,在其中添加需要接收的廣播類型,然後調用Context的registerReceiver方法。
//注冊
receiver = new LockScreenReceiver();
filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
this.registerReceiver(receiver, filter);
//取消注冊
this.unregisterReceiver(receiver);至此,一個輸入密碼才能訪問的應用demo就基本OK了。
Demo代碼下載: 地址
界面比較丑陋,有時間再改一下。
同步發表在 http://www.barryzhang.com/archives/146
廣告一下我的新博客,歡迎訪問哈~:BarryZhang.com
android 在開發WebView時,去掉網頁的標題並設置成自定義的標題
IOS中關於去掉標題只需類似下面的兩行代碼[js appendString:@var title = document.getElementsByClassName(
Android開發之低調的Service
锲而捨之,朽木不折;锲而不捨,金石可镂。——荀況今天學習了一下Service的用法就和大家一起來討論Android中Service的相關知識點,如
AIDL
官網地址詳解分析:http://developer.android.com/guide/components/aidl.html一)什麼是AIDL –》 應用
Android生成隨機驗證碼技術
在Android客戶端應用開發中,往往需要短信驗證碼或者隨機驗證碼來限制用戶的操作或者認證。短信驗證碼是為了對用戶進行認證,主要通過Http協議等通信協議實現;隨機驗證碼