[英]open activity when power button pressed android
我正在嘗試制作一個鎖屏應用程序,這就是為什么我想在每次打開屏幕時都啟動我的應用程序的原因。 目前,我找到了一種解決方案,其中使用了屏幕接收器的開/關以及方法onPause()
和onResume()
。 這是示例的鏈接: http : //thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/#comment-4777
我使用的是活動示例,而不是服務示例。
當屏幕關閉並打開且應用程序已在運行時,我實際上在LogCat中得到了“反饋”。 問題是,當我打開屏幕時,該應用程序無法啟動(即使顯示在最近使用的應用程序下)。
我不確定,但是我認為示例可以正常工作,只是缺少添加基本代碼。
我希望有人能幫幫忙 !!
感謝你及時的答復。 我已嘗試運行您的代碼,但仍無法正常工作。 我不確定是怎么了。 沒有錯誤信息。 該應用程序僅能正常運行,但在屏幕打開時不會啟動。
為了更輕松地為我提供幫助,這是我的代碼;)
這是我的接收者:
package com.example.screenlocker;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
public static boolean screenOff = true;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = true;
Intent i = new Intent(context,LockService.class);
i.putExtra("screen_state", screenOff);
context.startService(i);
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = false;
}
}
這是我的服務:
package com.example.screenlocker;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
public class LockService extends Service {
public void onCreate(){
IntentFilter filter=new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver locker=new StartMyServiceAtBootReceiver();
registerReceiver(locker, filter);
}
@Override
public void onStart(Intent intent, int startId) {
boolean screenOn = intent.getBooleanExtra("screen_state", false);
if(screenOn){
startActivity(new Intent(this, MainActivity.class));
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
也許您知道出了什么問題。
為了做到這一點,需要做以下事情。
1.當您的應用程序啟動時,您必須啟動用於注冊SCREEN_TURN_ON
和SCREEN_TURN_OFF events
。
原因如果您不會啟動服務來注冊這些事件並僅將其注冊到活動中,那么當活動被破壞時,它將停止注冊屏幕開/關事件。制作服務會使該服務的壽命超過活動或應用程序的生命周期。
2.現在您需要在服務中放入一些代碼(在onCreate
方法內部)
IntentFilter filter=new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
locker=new startLockActivity();
registerReceiver(locker, filter);
3.制作BroadCastReciever並檢查Screen ON / OFF事件並相應地執行操作。
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = true;
Intent i = new Intent(context,Locker.class);
i.putExtra("screen_state", screenOff);
context.startService(i);
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = false;
}
4.現在,在服務中的onStartCommand
方法中放置一些代碼,以獲取通過接收方發送的標志並開始您的鎖定活動。
boolean screenOn = intent.getBooleanExtra("screen_state", false);
if(screenOn){
startActivty(this,yourLockActivity.class);
}
希望它可以幫助您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.