導航:首頁 > 操作系統 > android鎖屏事件監聽

android鎖屏事件監聽

發布時間:2022-09-06 16:50:56

android可監聽的事件類型(提示:用戶事件和系統事件,用戶事件又分為按鍵事件和觸屏事件)

在android系統中,存在多種界面事件,如點擊事件,觸摸事件,焦點事件,和菜單事件
用戶事件和系統事件等,事件發生時,android界面框架調用界面控制項的事件處理函數對事件進行處理。
如:用戶事件:
按鍵事件:keyevent將傳遞給onkey()函數進行處理
觸屏事件:touchevent將傳遞給ontouch()函數進行處理。

Ⅱ android 是怎樣監聽事件

監聽事件,直接新建一個匿名的監聽介面,類似於下面這樣的:
b1.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intet = new Intent(MainActivity.this,seekbar.class);
startActivity(intet);
//finish();
}

});

Ⅲ 在android中怎樣給整個頁面設置監聽事件

您可以類似這樣,先實例化子頁面中的Button控制項,然後將實例化後的控制項綁定監聽事件 View view=LayoutInflater.from(context).inflate(R.layout.abc_action_bar_view_list_nav_layout,null); Button button= (Button) view.findViewById(R.id.action_bar); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //寫上點擊後要執行的事件 } }); 當然了,您要在不同頁面實現不同的功能的話,您可以將以上代碼寫在viewPager.setOnPageChangeListener的滾動回調方法當中進行頁面滾動的判斷,從而執行不同的點擊事件。希望能幫到您,如果還有什麼問題,歡迎您繼續追問。謝謝。

Ⅳ 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");
}
});

通過以上步驟即實現了對屏幕狀態的監聽.

Ⅳ android怎麼監聽手指抬起屏幕的事件

一般情況下,你在MotionEvent.ACTION_UP或者MotionEvent.ACTION_POINTER_UP等UP事件的回調中處理即可,因為手指在屏幕上如果按著即使不動的情況下,其實Action_move仍在回調,就是用戶比較難模擬出來那種完全手指按著屏幕一個像素點也沒有動的情況。
或者你不想在UP事件中處理,那麼就在Move中檢測單位事件內移動的具體,比如100ms內如果用戶手指移動距離小於你自己定義的閥值的話,可以認為用戶沒有移動手指。
寫了半天才發現你問的不是這個問題。
你的問題可以通過先計算你將要滑動屏幕到的最終位置,然後通過判斷你現在已經滑動到的位置,如果兩個位置間的距離小於某個閥值比如一像素的話,那麼就可以看做屏幕滑動停止了。

可以參考一下launcher中對屏幕滑動結束的處理邏輯。

Ⅵ Android的對話框怎麼監聽觸屏事件

用我這個, 我己經給你寫好了,你可以稍做修改就能用,
title是對話框的標題
icon是resID,是一張圖片的ID,放在你res目錄下的drawable
okcmd和cancelcmd分別是確認和取消按鈕的字元串

//確認對話框的呼出
public void showDialog(String title,int icon,String msg,String okcmd,String cancelCmd){
if(okcmd==null){return;}
Log.i("setDialog", "dialogTitle="+title
+" dialogContent"+msg+
" dialogCmdOk"+okcmd
+" dialogCmdCancel"+cancelCmd
+" dialogIcon"+icon);

Builder builder=new AlertDialog.Builder(this);
builder.setTitle(title);
if(icon>0){
builder.setIcon(icon);
}else{
builder.setIcon(R.drawable.icon);
}
builder.setMessage(msg);
builder.setPositiveButton(okcmd,
new
android.content.DialogInterface.OnClickListener(){
public void onClick(DialogInterface d, int i) {
Log.i("showDialog", "onClick");
}
});
if(cancelCmd!=null && cancelCmd.length()>0){
builder.setNeutralButton(cancelCmd,
new android.content.DialogInterface.OnClickListener(){
public void onClick(DialogInterface d, int i) { }
});
}

AlertDialog dialog =builder.create();
dialog.show();
}

Ⅶ android 怎麼自定義監聽事件

新建一個android工程,找到工程下res->layout->activity_main.xml文件並打開

從左側工具欄,拖入button到界面上,button默認id為button1

1、在Activity中給button綁定監聽事件(setOnClickListener),代碼如下:
//button綁定監聽事件
Button btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder build = new Builder(MainActivity.this);
build.setMessage("Test").show();
}
});

2、直接在layout.xml中綁定onclick事件;
同時添加對應的監聽事件處理函數
public void Test(View v){
AlertDialog.Builder build = new Builder(this);
build.setMessage("Test").show();
}

運行程序,在模擬器/真機中查看效果
點擊button,彈出Test提示框,說明事件綁定成功。

Ⅷ Android-保活

Low Memory Killer

打開的應用越多,後台緩存的進程也越多。因為系統出於體驗和性能上的考慮,app在退到後台時系統並不會真正的kill掉這個進程,而是將其緩存起來。於是在系統內存不足的情況下,系統開始依據自身的一套進程回收機制來判斷要kill掉哪些進程,以騰出內存來供給需要的app, 這套殺進程回收內存的機制就叫 Low Memory Killer。

進程的優先順序(by:https://developer.android.google.cn/guide/components/activities/process-lifecycle?hl=zh-cn)

前台進程

用戶正在使用的程序,一般系統是不會殺死前台進程的,除非用戶強制停止應用或者系統內存不足等極端情況會殺死。

可見進程

用戶正在使用,看得到,但是摸不著,沒有覆蓋到整個屏幕,只有屏幕的一部分可見進程不包含任何前台組件,一般系統也是不會殺死可見進程的,除非要在資源吃緊的情況下,要保持某個或多個前台進程存活施。

服務進程

在內存不足以維持所有前台進程和可見進程同時運行的情況下,服務進程會被殺死。

後台進程

系統可能隨時終止它們,回收內存。

空進程

某個進程不包含任何活躍的組件時該進程就會被置為空進程,完全沒用,殺了它只有好處沒壞處,第一個干它。

內存閾值

內存閾值在不同的手機上不一樣,一旦低於該值,Android便會殺死對應優先順序的進程。一旦低於該值,Android便開始按逆序關閉進程。即優先順序從最高的空進程開始,逆序關閉,直到內存足夠。

如何判斷進程的優先順序?

通過 oom_adj 值,判斷進程的優先順序,不同手機的oom_adj 值可能不一樣。

我們了解這個有什麼用呢?PS:了解這個你才能想辦法保證自己怎麼不被殺掉。

網上的一些方案和自己認為有用的方案

1 開啟一個像素Activity(偽前台進程)

在鎖屏的時候在本進程開啟一個Activity,為了欺騙用戶,讓這個Activity的大小是1像素,並且透明無切換動畫,在開屏幕的時候,把這個Activity關閉掉,所以這個就需要監聽系統鎖屏廣播。

我們的應用就始終和前台進程是一樣的優先順序了,為了省電,系統檢測到鎖屏事件後一段時間內會殺死後台進程,如果採取這種方案,就可以避免了這個問題,但是還是有被殺掉的可能。

Android5.0以下:

Process.killProcessQuiet(pid);

Android5.0以後:

Process.killProcessQuiet(app.pid);

Process.killProcessGroup(app.info.uid, app.pid);

應用退出後,ActivityManagerService不僅把主進程給殺死,另外把主進程所屬的進程組一並殺死,這樣一來,由於子進程和主進程在同一進程組,子進程在做的事情,也就停止了。

2 相互喚醒(廣播喚醒)

相互喚醒的意思就是,假如你手機里裝了支付寶、淘寶、天貓、UC等阿里系的app,那麼你打開任意一個阿里系的app後,有可能就順便把其他阿里系的app給喚醒了。這個完全有可能的。此外,開機,網路切換、拍照、拍視頻時候,利用系統產生的廣播也能喚醒app,不過Android N已經將這三種廣播取消了。

3 JobSheler機制保活(不推薦)

JobSheler是作為進程死後復活的一種手段,native進程方式最大缺點是費電, Native 進程費電的原因是感知主進程是否存活有兩種實現方式,在 Native 進程中通過死循環或定時器,判斷主進程是否存活,當主進程不存活時進行拉活。其次5.0以上系統不支持。  但是JobSheler可以替代在Android5.0以上native進程方式,這種方式即使用戶強制關閉,部分廠商手機(如:華為)也能被拉起來,但AndroidN失效。

4 粘性服務&與系統服務捆綁()

這個是系統自帶的,onStartCommand方法必須具有一個整形的返回值,這個整形的返回值用來告訴系統在服務啟動完畢後。Service的onStartCommand方法里返回 STATR_STICK,onDestory中start自啟(准確的將算不上進程拉活,只能算service自啟,force_stop後不能正常拉活)。

5 監聽第三方app開放的靜態廣播(同2)

需要大量反編譯app去找開放的靜態廣播,而且不保證長期有效,可能第三方開放廣播在版本升級時改為私有廣播,如果自己公司有多個app,可廣播互相拉起。

6 NDK+Socket通過fork實現進程保活方案()

實現進程守護實際是守護app的主要服務,當app主進程被系統kill時,主要服務也會殺死,守護進程將其喚醒。

實現原理圖:

進程保活方案調研結果

未能實現真正意義上的進程保活。

光從保活這一點來說,綁定一個像素activity和循環一個無聲的聲音這種方法比較好,但是對用戶來說太流氓了,不推薦。  對於有硬性需求的,可以引導用戶加入白名單。至於推送,  可以嘗試集成多個推送方案,小米,華為等都有推送sdk,在對應手機上可以確保收到消息,  然後像網路這種是多app公用通道的,也就是手機中有一個使用網路推送的app被允許後台啟動,就能讓其他app收到推送。隨著Android版本的不斷更新及國內廠商對ROM的不斷優化,如何最大可能的對進程保活,是Android一道需要長期學習/鑽研的學問,也是Android開發者不得不面對的問題。

引援:https://www.jianshu.com/p/1c353edf73ba

Ⅸ android 鎖屏時,獲取屏幕點擊事件。 想做一個程序:鎖屏時,通過雙擊、三次點擊等將屏幕

……如果你的手機不是自帶這種功能的話,很難做的,基本不可能,要不然這么好的功能早就被做出來了,鎖屏時屏幕斷電不接受任何觸控,不是軟體就能解決的

閱讀全文

與android鎖屏事件監聽相關的資料

熱點內容
阿里雲伺服器能復制數據嗎 瀏覽:554
python拼音轉換文字 瀏覽:562
動畫遺傳演算法 瀏覽:63
php如何解析xml文件 瀏覽:702
如何改變appstore的語言 瀏覽:462
javahtmlxml 瀏覽:34
單片機啟動文件 瀏覽:811
橙app如何開啟聊天 瀏覽:899
訪問伺服器公網地址 瀏覽:666
pdf列印底色去掉 瀏覽:463
java快遞介面 瀏覽:397
哪個app可以教新爸爸 瀏覽:210
如何查看伺服器系統版本信息 瀏覽:524
成都市土地出讓金演算法 瀏覽:704
鋼筋加密標記 瀏覽:578
ps中擴展功能在文件夾的什麼位置 瀏覽:905
雙極壓縮機為什麼要先高壓 瀏覽:529
蘋果手機伺服器填什麼 瀏覽:833
android移動動畫效果 瀏覽:693
電子和伺服器是什麼意思 瀏覽:694