实验作业 锁屏应用一

一 实验代码(部分)

meactivity

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.WindowManager;
import android.widget.RelativeLayout;

@SuppressWarnings("deprecation")
public class MEActivity extends Activity {
    private static final String LOCK_TAG = null;
    private boolean isopent = false;
    private Camera camera;
    public static int MSG_LOCK_SUCESS = 1;
    public static int MY_PHONE = 2;
    public static int MY_SSM = 3;
    public static int MY_TROCH = 4;
    public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;
    
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);//关键代码 
        setContentView(R.layout.activity_main);
        //调用方法
        mylockview(); 
        KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE); //对锁屏进行管理
        KeyguardLock keyguardLock = keyguardManager.newKeyguardLock(LOCK_TAG); 
        keyguardLock.disableKeyguard(); //执行应用时隐藏锁屏
        startService(new Intent(MEActivity.this, ZdLockService.class));
        //this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);  
    }
 
 
	@SuppressLint("HandlerLeak")
	public Handler mHandler =new Handler (){
		
		public void handleMessage(Message msg){

			if(MSG_LOCK_SUCESS == msg.what)
			{
				Intent i= new Intent(Intent.ACTION_MAIN);
				i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //提示如果是服务里调用,必须加入new task标识
				i.addCategory(Intent.CATEGORY_HOME);
				startActivity(i);
				kg();
				finish();
			}
			if(MY_PHONE == msg.what)
			{
				Intent intent = new Intent(Intent.ACTION_DIAL);
				intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
						| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
				startActivity(intent);
				kg();
				finish();
			}
			if(MY_SSM == msg.what)
			{
				Intent intent = new Intent();
				ComponentName comp = new ComponentName("com.android.mms",
						"com.android.mms.ui.ConversationList");
				intent.setComponent(comp);
				intent.setAction("android.intent.action.VIEW");
				intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
						| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
				startActivity(intent);
				kg();
				finish();
			}
			if(MY_TROCH == msg.what)
			{
				if(!isopent)
				{
					camera = Camera.open();
					Parameters params = camera.getParameters();
					params.setFlashMode(Parameters.FLASH_MODE_TORCH);
					camera.setParameters(params);
					camera.startPreview();
					isopent = true;
				}
				else
				{
					camera.stopPreview();
					camera.release();
					isopent = false;
				}
			}
		}

	};
	

	
    public void mylockview()
    {	//定义一个空间,用于放置图像,
    	@SuppressWarnings("unused")
		WindowManager winManager=(WindowManager)getSystemService(Context.WINDOW_SERVICE);
    	
    	RelativeLayout layout=(RelativeLayout) findViewById(R.id.root);
    	final DrawView view=new DrawView(this); 
         layout.addView(view);  //将view添加到activtymain
         view.setMainHandler(mHandler);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    //屏蔽back键
    public boolean onKeyDown(int keyCode ,KeyEvent event){
		
		if(event.getKeyCode() == KeyEvent.KEYCODE_BACK)
			return true ;
		else
			return super.onKeyDown(keyCode, event);
		
	}
    
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
     
            Log.d("Focus debug", "Focus changed !");
     
        if(!hasFocus) {
            Log.d("Focus debug", "Lost focus !");
     
            Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
            closeDialog.putExtra("reason", "globalactions");//可避免关机对话框被关闭
            sendBroadcast(closeDialog);
        }
    }
    public void kg()
    {
    	if(!isopent)
		{
		}
		else
		{
			camera.stopPreview();
			camera.release();
			isopent = false;
		}
    }
}
在本段测试代码中

首先是锁屏,锁屏当然按键就不能用了,所以就要添加命令屏蔽,当前activity运行时就不会锁屏

在app 中要屏蔽home 键的activity 中,只需要添加该标志就可以了      
getWindow().addFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED);    
注意:以上代码要加在setContentView()之前才行;

KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE); 新建它对锁屏进行管理。平时打开应用则将要把锁屏隐蔽,则会用到 keyguardLock.disableKeyguard();

定义一个mylockview(),用来放置锁屏图像,getSystemService(Context.WINDOW_SERVICE)根据系统的WINDOW_SERVICE窗口服务,获取管理打开的窗口程序,将锁屏的view 添加的activity。在锁屏时返回键是不能用的,所以还要屏蔽掉返回键。

还有在锁屏中添加一些快捷应用,拨打电话,短信。

当然在开机时手机会自动锁屏,所以就要有监听手机是否开启

BootBroadcastReceiver

public class BootBroadcastReceiver extends BroadcastReceiver {

	static final String ACTION = "android.intent.action.BOOT_COMPLETED";//监听手机开机

	@Override
	public void onReceive(Context context, Intent intent) {
	
	if (intent.getAction().equals(ACTION)){
		Intent sayHelloIntent=new Intent(context,MEActivity.class);
		sayHelloIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		context.startActivity(sayHelloIntent);//执行sayhello
		}
	}
}
除去开机,还有熄屏亮屏都会锁屏所以
 ZdLockService

public class ZdLockService extends Service {

	private static String TAG = "ZdLockService";
	private Intent zdLockIntent = null ;
	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	public void onCreate(){
		super.onCreate();
		
		
		zdLockIntent = new Intent(ZdLockService.this , MEActivity.class);
		zdLockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		
		/*注册 屏幕唤醒时的广播*/
		IntentFilter mScreenOnFilter = new IntentFilter("android.intent.action.SCREEN_ON");
		ZdLockService.this.registerReceiver(mScreenOnReceiver, mScreenOnFilter);
		
		/*注册 屏幕锁屏时的广播*/
		IntentFilter mScreenOffFilter = new IntentFilter("android.intent.action.SCREEN_OFF");
		ZdLockService.this.registerReceiver(mScreenOffReceiver, mScreenOffFilter);
	}

	public int onStartCommand(Intent intent , int flags , int startId){
		
		return super.onStartCommand(intent, flags, startId);
		//return Service.START_STICKY;
		
	}
	
	public void onDestroy(){
		super.onDestroy();
		
		ZdLockService.this.unregisterReceiver(mScreenOnReceiver);
		ZdLockService.this.unregisterReceiver(mScreenOffReceiver);
		//在此重新启动
		startService(new Intent(ZdLockService.this, ZdLockService.class));
		
	}
	
	private KeyguardManager mKeyguardManager = null ;
	@SuppressWarnings("deprecation")
	private KeyguardManager.KeyguardLock mKeyguardLock = null ;
	//屏幕变亮的广播,隐藏默认的锁屏界面
	private BroadcastReceiver mScreenOnReceiver = new BroadcastReceiver(){

		@Override
		public void onReceive(Context context , Intent intent) {
			
            Log.i(TAG, intent.getAction());

			if(intent.getAction().equals("android.intent.action.SCREEN_ON")){
				Log.i(TAG, "----------------- android.intent.action.SCREEN_ON------");
			}
		}
		
	};
	
	//屏幕变暗/变亮的广播 , 我们要调用KeyguardManager类相应方法去解除屏幕锁定
	private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver(){
		@SuppressWarnings("deprecation")
		@Override
		public void onReceive(Context context , Intent intent) {
			String action = intent.getAction() ;
			
		    Log.i(TAG, intent.toString());
		    
			if(action.equals("android.intent.action.SCREEN_OFF")
					|| action.equals("android.intent.action.SCREEN_ON") ){
				mKeyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
				mKeyguardLock = mKeyguardManager.newKeyguardLock("zdLock 1"); 
				mKeyguardLock.disableKeyguard();
				startActivity(zdLockIntent);
			}
		}
		
	};
	
}
activity_main.xml文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/root"
    >
</RelativeLayout>
虽然是空的,但会将锁屏界面直接导入进来。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值