首先,需要啟動一個後台服務,用於註冊一個BroadcastReceiver
這個BroadcastReceiver用於監聽Intent.ACTION_SCREEN_OFF
這樣在發生這個事件Intent.ACTION_SCREEN_OFF 也就是使用者鎖屏或者螢幕上鎖時觸發。
Service中註冊BroadcastReceiver代碼
package com.pingbao;<br />import android.app.KeyguardManager;<br />import android.app.Service;<br />import android.app.KeyguardManager.KeyguardLock;<br />import android.content.BroadcastReceiver;<br />import android.content.Context;<br />import android.content.Intent;<br />import android.content.IntentFilter;<br />import android.os.IBinder;<br />import android.util.Log;<br />public class ZyScreenService extends Service {<br />KeyguardManager mKeyguardManager = null;<br />private KeyguardLock mKeyguardLock = null;<br />@Override<br />public IBinder onBind(Intent arg0) {<br />// TODO Auto-generated method stub<br />return null;<br />}<br />@Override<br /> public void onCreate()<br /> {<br /> // TODO Auto-generated method stub</p><p> super.onCreate();<br /> }<br /> @Override<br /> public void onStart(Intent intent, int startId)<br /> {<br /> // TODO Auto-generated method stub<br /> Log.i("in Service","in Service");<br />mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);<br />mKeyguardLock = mKeyguardManager.newKeyguardLock("");<br />mKeyguardLock.disableKeyguard();<br />Log.i("in Service1","in Service1");<br />BroadcastReceiver mMasterResetReciever = new BroadcastReceiver() {<br />public void onReceive(Context context, Intent intent) {<br />try {<br />Intent i = new Intent();<br />i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);<br />i.setClass(context, ZyScreenSaver.class);<br />context.startActivity(i);<br />// finish();<br />Log.i("BroadcastReceiver","BroadcastReceiver");<br />} catch (Exception e) {<br />Log.i("Output:", e.toString());<br />}<br />}<br />};<br />registerReceiver(mMasterResetReciever, new IntentFilter(<br />Intent.ACTION_SCREEN_OFF));<br /> }</p><p>}<br />
然後在我們啟動的ZyScreenSaver這個屏保介面Activity裡寫上
package com.pingbao;<br />import android.app.Activity;<br />import android.app.AlertDialog;<br />import android.app.Dialog;<br />import android.content.DialogInterface;<br />import android.content.Intent;<br />import android.content.DialogInterface.OnClickListener;<br />import android.os.Bundle;<br />import android.util.Log;<br />import android.view.KeyEvent;<br />import android.view.Window;<br />import android.view.WindowManager;<br />import android.widget.ArrayAdapter;<br />public class ZyScreenSaver extends Activity {<br />@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />requestWindowFeature(Window.FEATURE_NO_TITLE);<br />getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,<br />WindowManager.LayoutParams.FLAG_FULLSCREEN);<br />setContentView(R.layout.main);<br />Log.i("MyScreenSaver", "MyScreenSaver");<br />}<br />public boolean onKeyDown(int keyCode, KeyEvent event) {<br />super.onKeyDown(keyCode, event);<br />if (keyCode == KeyEvent.KEYCODE_BACK) {<br />Log.i("4", "4");<br />showDialog(1);<br />}<br />// finish();<br />return true;<br />}<br />protected Dialog onCreateDialog(int id) {<br />switch (id) {<br />case 1:<br />return new AlertDialog.Builder(ZyScreenSaver.this).setIcon(<br />R.drawable.icon).setTitle("退出屏保").setMessage(<br />"是否退出屏保").setPositiveButton("確定",<br />new OnClickListener() {<br />@Override<br />public void onClick(DialogInterface dialog, int which) {<br />// TODO Auto-generated method stub<br /> finish();<br />}<br />})<br />.setNegativeButton("取消",<br />new OnClickListener() {<br />@Override<br />public void onClick(DialogInterface dialog, int which) {<br />// TODO Auto-generated method stub<br />removeDialog(1);</p><p>}<br />})<br />.create();<br />}<br />return null;<br />}<br />}<br />
然後在我們的主介面裡寫上啟動服務就可以了
package com.pingbao;<br />import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.util.Log;<br />import android.view.Window;<br />import android.view.WindowManager;<br />public class Zypingbao extends Activity {<br />/** Called when the activity is first created. */<br />@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br />Log.i("pingbao","pingbao");<br />Intent mService=new Intent(Zypingbao.this,ZyScreenService.class);//啟動服務<br />mService.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);<br />startService(mService);</p><p>}<br />}
在Manifest裡貼許可權
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
源碼下載
http://download.csdn.net/source/2996510
如果實在要屏蔽home鍵 還有一種辦法 就是
public void onAttachedToWindow() {<br />this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);<br />super.onAttachedToWindow();<br />}
這樣在
public boolean onKeyDown(int keyCode, KeyEvent event)
函數裡就能監聽到home了
本部落格著作權歸CSDN博主曾陽所有
http://blog.csdn.net/Zengyangtech/archive/2011/01/21/6157508.aspx
轉載請註明