android锁屏软件制作

一、首先要创建一个Service保证Service一直开启,同时不被一键清理掉。

二、屏蔽掉系统的锁屏

三、创建锁屏的Activity,在Activity中屏蔽掉back,menu,home键

四、保证自己的进程不在最近任务中出现

 

一、创建一个Service名字为LockService

[java]

  1. public class LockService extends Service{  
  2.   
  3.     private KeyguardManager km;  
  4.     private KeyguardLock kk;  
  5.     private BroadcastReceiver broadcastReceiver=new BroadcastReceiver() {  
  6.           
  7.         @Override  
  8.         public void onReceive(Context context, Intent arg1) {  
  9.             Log.e(“—–可以跳到锁屏界面——–““———“);  
  10.             Intent intent=new Intent(context,LockActivity.class);  
  11.             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  12.             startActivity(intent);  
  13.         }  
  14.     };  
  15.     @Override  
  16.     public IBinder onBind(Intent arg0) {  
  17.           
  18.         return null;  
  19.     }  
  20.   
  21.   
  22.     @Override  
  23.     public void onStart(Intent intent, int startId) {  
  24.         super.onStart(intent, startId);  
  25.           
  26.         //服务里面收到关闭屏幕的动作就发送广播  
  27.         IntentFilter iFilter=new IntentFilter(Intent.ACTION_SCREEN_OFF);  
  28.   
  29.         this.registerReceiver(broadcastReceiver, iFilter);  
  30.   
  31.     }  
  32.   
  33.     @Override  
  34.     public void onCreate() {  
  35.         super.onCreate();  
  36.         //屏蔽掉系统的锁屏  
  37.         km=(KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);  
  38.         kk=km.newKeyguardLock(“”);  
  39.         kk.disableKeyguard();  
  40.   
  41.     }  
  42.       
  43.     @Override  
  44.     public void onDestroy() {  
  45.   
  46.         super.onDestroy();  
  47.     }  
  48.       
  49. }  


在Service中与他合作的还有一个广播,当监听到屏幕关的时候,service就会发送广播,使屏幕开的时候为自己锁屏界面

 

三、锁屏界面中屏蔽掉menu,home,back

[java]

  1. public class LockActivity extends Activity{  
  2.     private  static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;  
  3.     private Button btn_open;  
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         // TODO Auto-generated method stub  
  7.         super.onCreate(savedInstanceState);  
  8.         this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);//关键代码   
  9.         setContentView(R.layout.activity_main);  
  10.         //解锁的按钮  
  11.         btn_open=(Button) findViewById(R.id.open);  
  12.           
  13.         btn_open.setOnClickListener(new OnClickListener() {  
  14.               
  15.             @Override  
  16.             public void onClick(View arg0) {  
  17.                 finish();  
  18.             }  
  19.         });  
  20.     }  
  21.     @SuppressWarnings(“static-access”)  
  22.     @Override  
  23.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  24.   
  25.         if(keyCode==event.KEYCODE_BACK){  
  26.             return true;  
  27.         }  
  28.         if(keyCode==event. KEYCODE_HOME){  
  29.             return true;  
  30.         }  
  31.         if(keyCode == KeyEvent.KEYCODE_MENU) {//MENU键  
  32.             //监控/拦截菜单键  
  33.              return true;  
  34.         }       
  35.         return super.onKeyDown(keyCode, event);  
  36.     }  
  37. }  

保证自己的锁屏程序不在最近进程中出现,只需要在注册锁屏界面的Activity时,添加一个属性android:excludeFromRecents=”true”,如下

 

[java]

  1.      <activity   
  2.          android:name=“com.mm.wallpaper.LockActivity”  
  3.          android:launchMode=“singleInstance”  
  4.          android:excludeFromRecents=“true”>  
  5. <intent-filter>  
  6.   
  7.               <category android:name=“android.intent.category.LAUNCHER” />  
  8.               <category android:name=“android.intent.category.DEFAULT” />  
  9.   
  10.           </intent-filter>  
  11.      </activity>  


四、我们需要看一下主界面怎么处理

[java]

  1. public class MainActivity extends Activity {  
  2.     MyBroadcast receiveBroadCast;  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.         //注册广播  
  8.         receiveBroadCast = new MyBroadcast();  
  9.         IntentFilter filter = new IntentFilter();  
  10.         filter.addAction(“action”); // 只有持有相同的action的接受者才能接收此广播  
  11.         registerReceiver(receiveBroadCast, filter);  
  12.           
  13.         //发送广播  
  14.         Intent intent=new Intent();  
  15.         intent.setAction(“action”);  
  16.         this.sendBroadcast(intent);  
  17.           
  18.     }  
  19.     public class MyBroadcast extends BroadcastReceiver{  
  20.   
  21.         @Override  
  22.         public void onReceive(Context context, Intent intent) {  
  23.   
  24.             KeyguardManager km = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);  
  25.   
  26.             KeyguardLock kk = km.newKeyguardLock(“”);  
  27.             kk.disableKeyguard();  
  28.               
  29.             //开始服务  
  30.             Intent service=new Intent();  
  31.             service.setClass(context,LockService.class);//稍后再定义  
  32.             context.startService(service);  
  33.         }  
  34.           
  35.     }  
  36.     @Override  
  37.     protected void onDestroy() {  
  38.         // TODO Auto-generated method stub  
  39.         super.onDestroy();  
  40.         unregisterReceiver(receiveBroadCast);  
  41.     }  
  42.       
  43. }  


在这里我们需要注册一个广播保证服务的开启

在配置清单中MainActivity需要多一个属性来保证程序始终在

[java]

  1. <category android:name=“android.intent.category.HOME”/>  



整个的流程大概如此,希望对想做解锁软件的朋友有所帮助。

标签