android監聽解鎖
1. android 怎樣收到系統發送的廣播
要注冊接受廣播的處理程序, 有兩種方式
在AndroidManifest.xml重注冊, 比如監聽系統的開機廣播和屏幕解鎖廣播
<receiver android:name="com.bestjoy.app.common.update.BootCompletedReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
這樣, 一旦有定義的action發出來,BootCompletedReceiver的onReceive方法就會回調了,這樣的監聽,不需要你的app已經在運行。
2. 在程序中動態創建監聽器, 比如還是解鎖廣播,
在Activity的onCreate()中生成一個IntentFilter對象
IntentFilter filter=new IntentFilter();
//為IntentFilter添加一個Action
filter.addAction("android.intent.action.USER_PRESENT");
bootCompletedReceiver = newUserPresentReceiver();
registerReceiver(smsReceiver, filter);
在onDestroy的時候去注冊
unregisterReceiver(bootCompletedReceiver);
這樣的方式只有在Activity生命周期onCreate()-onDestroy()之間有效。
對於一些特俗的系統級別的廣播,即使你按照上面的任何一種方式做了, 也可能監聽不到, 這是android 系統做了保護了, 網上查一下就知道了。
2. 如何檢驗android解鎖是否成功
解鎖成功後會有廣播的
摘要 你好,安卓手機應用加密能防偷窺與竊聽,加密應用鎖是一款隱私防護工具,可以讓你給手機應用上鎖防止他人窺視。加密應用鎖app中提供了應用鎖的功能,可以讓你給手機上需要加鎖的應用上鎖,上鎖後必須繪制解鎖圖案或者是輸入正確密碼才可使用該應用,不然是無法進入使用的。想要上鎖成功是需要給予相關許可權的,不然在APP內顯示應用上鎖了也沒有效果。加密應用鎖APP還提供了偽裝成計算器等應用功能,可以讓你將加密應用鎖app進行隱藏。
4. Android怎麼打開/關閉系統解鎖服務
轉載 Android如何打開/關閉系統解鎖服務?—典型錯誤分析
最近正在做一個Android的解鎖應用,需要屏蔽系統解鎖,並在適當的時候打開系統解鎖,在網上search了很多有關系統解鎖的資料,學到了很多關於系統解鎖方面的知識,同時也發現了很多網友犯下的一個共同的錯誤。現分享一下:
錯誤一:
總所周知,要關閉系統自帶的鎖屏服務需要用到以下代碼:
mKeyguard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
mKeylock = mKeyguard.newKeyguardLock("");
mKeylock.disableKeyguard();
要打開系統鎖屏服務需要以下代碼:
mKeylock.reenableKeyguard()
網上很多朋友對disableKeyguard()的理解為:將屏幕打開並解鎖,只要執行這個方法就會是屏幕變亮並自動解鎖!同樣reenableKeyguard()的作用是關閉屏幕並上鎖!
大錯而特錯了!
我們來看看google api對這兩個方法的解釋:
disableKeyguard: Disable the keyguard from showing. If the keyguard is currently showing, hide it. The keyguard will be prevented from showing again untilreenableKeyguard() is called.
reenableKeyguard: Reenable the keyguard. The keyguard will reappear if the previous call todisableKeyguard() caused it it to be hidden.
所以,disableKeyguard只是關閉系統鎖屏服務,調用該方法後並不會立即解鎖,而是使之不顯示解鎖,同樣reenableKeyguard是恢復鎖屏服務,並不會立即鎖屏!
錯誤二:
下面是通過兩個按鈕來模擬打開/關閉系統鎖屏的代碼:
package com.example.keyguard; import android.os.Bundle; import android.app.Activity; import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import android.content.Context; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.support.v4.app.NavUtils; public class KeyGuardActivity extends Activity { private Button myButtonOn, myButtonOff; private KeyguardManager km; private final String TAG = "KeyGuardTest"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_key_guard); /* 獲取KeyGuardManager對象 */ km = (KeyguardManager)this.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); myButtonOff = (Button)findViewById(R.id.buttonOff); myButtonOff.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { /* 關閉系統鎖屏服務 */ km.newKeyguardLock(TAG).disableKeyguard(); } }); myButtonOn = (Button)findViewById(R.id.buttonOn); myButtonOn.setOnClickListener(new Button.OnClickListener(){public void onClick(View arg0) { /* 打開系統鎖屏服務 */ km.newKeyguardLock(TAG).reenableKeyguard(); } }); } }
這段代碼看起來很完美,但是執行之後會發現:只能關閉鎖屏服務,無法恢復鎖屏服務!
是什麼原因呢?
原來是在調用disableKeyguard和reenableKeyguard的時候必須使用同一個KeyguardLock對象!
程序略加修改:
package com.example.keyguard; import android.os.Bundle; import android.app.Activity; import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import android.content.Context; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.support.v4.app.NavUtils; /** * @author Onejune * @function 打開/關閉系統鎖屏服務測試 * @note 在打開/關閉系統鎖屏服務時必須使用同一個KeyguardLock對象,否則出錯 */ public class KeyGuardActivity extends Activity { private Button myButtonOn, myButtonOff; private KeyguardManager km; private KeyguardLock kl; private final String TAG = "KeyGuardTest"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_key_guard); /* 獲取KeyGuardManager對象 */ km = (KeyguardManager)this.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); /* 獲取KeyguardLock對象 */ kl = km.newKeyguardLock(TAG); myButtonOff = (Button)findViewById(R.id.buttonOff); myButtonOff.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { /* 關閉系統鎖屏服務 */ kl.disableKeyguard(); } }); myButtonOn = (Button)findViewById(R.id.buttonOn); myButtonOn.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { /* 打開系統鎖屏服務 */ kl.reenableKeyguard(); } }); } }
終於OK!
5. android開發中如何捕捉自動休眠灰屏的這個事件
捕捉自動休眠灰屏的事件,可以通過監聽系統的廣播獲得當前手機屏幕的狀態,廣播需要在注冊文件中注冊,具體的實現代碼如下:
public class ScreenListener {
private Context mContext;
private ScreenBroadcastReceiver mScreenReceiver;
private ScreenStateListener mScreenStateListener;
public ScreenListener(Context context) {
mContext = context;
mScreenReceiver = new ScreenBroadcastReceiver();
}
/**
* screen狀態廣播接收者
*/
private class ScreenBroadcastReceiver extends BroadcastReceiver {
private String action = null;
@Override
public void onReceive(Context context, Intent intent) {
action = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(action)) { // 開屏
mScreenStateListener.onScreenOn();
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 鎖屏
mScreenStateListener.onScreenOff();
} else if (Intent.ACTION_USER_PRESENT.equals(action)) { // 解鎖
mScreenStateListener.onUserPresent();
}
}
}
/**
* 開始監聽screen狀態
*
* @param listener
*/
public void begin(ScreenStateListener listener) {
mScreenStateListener = listener;
registerListener();
getScreenState();
}
/**
* 獲取screen狀態
*/
private void getScreenState() {
PowerManager manager = (PowerManager) mContext
.getSystemService(Context.POWER_SERVICE);
if (manager.isScreenOn()) {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOn();
}
} else {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOff();
}
}
}
/**
* 停止screen狀態監聽
*/
public void unregisterListener() {
mContext.unregisterReceiver(mScreenReceiver);
}
/**
* 啟動screen狀態廣播接收器
*/
private void registerListener() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiver(mScreenReceiver, filter);
}
public interface ScreenStateListener {// 返回給調用者屏幕狀態信息
public void onScreenOn();
public void onScreenOff();
public void onUserPresent();
}
}
在上面的代碼中,用到了動態注冊廣播,在需要監聽屏幕狀態的activity中,當不需要監聽的時候,如activity finish的時候,使用unregisterListener解除廣播監聽;
下面是在Activity中調用;
ScreenListener l = new ScreenListener(this);
l.begin(new ScreenStateListener() {
@Override
public void onUserPresent() {
Log.e("onUserPresent", "onUserPresent");
}
@Override
public void onScreenOn() {
Log.e("onScreenOn", "onScreenOn");
}
@Override
public void onScreenOff() {
Log.e("onScreenOff", "onScreenOff");
}
});
通過以上步驟即實現了對屏幕狀態的監聽.
6. android開發密碼解鎖的api
我寫過一個類似於 windows多用戶啟動的 寫了個開頭 實現了開機啟動以及屏蔽各種按鍵,所以lz可以參考一下如何實現應用的開機啟動,這個是要改xml的。
然後解鎖後輸入密碼 沒做過 難道要寫一個service來監聽解鎖么??
7. android鎖屏開發難題,系統鎖出現後如何自動取消的問題
(1)看看能不能捕獲到鎖屏的廣播(類似監聽通話廣播)
(2)看看能不能監聽鎖屏狀態(類似監聽通話狀態改變)
之前,我做個萬能鑰匙,給android手機解鎖用的,不過要注冊設備管理器的許可權。
你也可以注冊設備管理器許可權,然後監聽設備狀態,如果設備狀態改變(變成加鎖),你就調用解鎖方法。
8. android怎麼實現自動解鎖,和自動打開應用程
當你打開某一軟體,你不按退出,直接來個點房子,然後他就後台運行了。你想在手機加速時,他還運行就得去把他給弄後台啟動。
9. Android中判斷屏幕是否亮屏和是否解鎖功能
1.屏幕是否亮屏:
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);//true為打開,false為關閉boolean ifOpen = powerManager.isScreenOn();
2.屏幕是否解鎖:
KeyguardManager mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);boolean flag = mKeyguardManager.inKeyguardRestrictedInputMode();
當前的屏幕鎖有五種設置,分別是沒有設置屏幕鎖,滑動解鎖,圖案解鎖,PIN碼解鎖,密碼解鎖。
如果沒有設置屏幕鎖,返回值會一直為FALSE。如果用戶設置了屏幕鎖(包括後四種鎖中的任何一種),屏幕不亮時返回TRUE,屏幕亮時,解鎖前返回TRUE,解鎖後返回FALSE。
有的時候我們只需一個判斷就能滿足需求,但有時我們需要這兩個相互結合滿足需求。
以上所述是小編給大家介紹的Android中判斷屏幕是否亮屏和是否解鎖功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
10. Android 4.1.2 為什麼寫的廣播注冊後 必須運行一次activity才能...
SCREEN_ON和SCREEN_OFF只能在Activity和Service裡面用,廣播接收器不行,service不會自動啟動 查看更多答案>>