編輯:關於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
IOS中關於去掉標題只需類似下面的兩行代碼[js appendString:@var title = document.getElementsByClassName(
锲而捨之,朽木不折;锲而不捨,金石可镂。——荀況今天學習了一下Service的用法就和大家一起來討論Android中Service的相關知識點,如
官網地址詳解分析:http://developer.android.com/guide/components/aidl.html一)什麼是AIDL –》 應用
在Android客戶端應用開發中,往往需要短信驗證碼或者隨機驗證碼來限制用戶的操作或者認證。短信驗證碼是為了對用戶進行認證,主要通過Http協議等通信協議實現;隨機驗證碼