Android开发自己的锁屏壁纸

SurfaceView  SurfaceHolder   MediaPlayer     Service      BroadcastReceiver     KeyguardManager     PowerManager 

思路:启动一个服务,监听灭屏广播,当收到广播的时候,点亮屏幕,禁用锁屏,调用使用SurfaceView播放视频。


1.启动一个服务

       <service android:name=".LockService" >
             <intent-filter>
                <category android:name="android.intent.category.default" />
            </intent-filter>
        </service>


        Intent intent = new Intent();
        intent.setClass(this,LockService.class);
        startService(intent); 


2.LockService onCreate中注册监听ACTION_SCREEN_OFF

 

       final IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
      
        registerReceiver(mReceiver, filter);


3.LockService 的内部监听类

  private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                Log.d("yzy","screen_off...");
                if(HelloActivity.isScreenOff == false){
                    wakeUpScreen();
                    Intent intent1  = new Intent();
                    intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent1.setClass(LockService.this, HelloActivity.class);//启动屏保界面
                    startActivity(intent1);
                    HelloActivity.isScreenOff = true;

                }
               
            } 
        }
    };

4.点亮屏幕,禁用锁屏

            KeyguardManager mKeyguardManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
            KeyguardLock mKeyguardLock = mKeyguardManager.newKeyguardLock("");
            mKeyguardLock.disableKeyguard();//解锁屏幕,也就是 关闭 屏幕 锁定 功能
            
            PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
            PowerManager.WakeLock mWakeLock = pm.newWakeLock(
                PowerManager.ACQUIRE_CAUSES_WAKEUP |
                PowerManager.SCREEN_DIM_WAKE_LOCK |
                PowerManager.ON_AFTER_RELEASE, "SimpleTimer");
            mWakeLock.acquire();
            //释放屏幕常亮锁
            if(null != mWakeLock) {
              //可以灭屏了
             //   mWakeLock.release();
            }


5.WallPaperSurfaceView MediaPlayer  SurfaceHolder 播放视频

public class WallPaperSurfaceView extends SurfaceView implements Callback {
	
	private SurfaceHolder mSurfaceHolder;
	public MediaPlayer mediaPlayer;
	String tag = "BackgroundSurfaceView";
	private HelloActivity helloActivity;

	@Override
    protected void onWindowVisibilityChanged(int visibility) {
        // TODO Auto-generated method stub
        super.onWindowVisibilityChanged(visibility);

    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        helloActivity.finish();
        HelloActivity.isScreenOff = false;
        return super.onTouchEvent(event);
    }
    public WallPaperSurfaceView(Context context, AttributeSet attrs) {
		super(context, attrs);
		
		helloActivity = (HelloActivity) context;
		mSurfaceHolder = getHolder();
		//设置SurfaceView自己不管理的缓冲区
		mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		mSurfaceHolder.addCallback(this);
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
	    Log.d("yzy","surfaceCreated.....");
	    mediaPlayer=new MediaPlayer();
		play();
		
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		holder.removeCallback(this);
		if(mediaPlayer!=null ) {
			mediaPlayer.release();
			mediaPlayer = null;
		}
	}
	
	
	private void play() {

		try {
		    if(mediaPlayer ==  null) {
		        mediaPlayer = new MediaPlayer();
		    }
		    
			mediaPlayer.reset();
			mediaPlayer
			.setAudioStreamType(AudioManager.STREAM_MUSIC);
			mediaPlayer.setScreenOnWhilePlaying(true);
			//设置需要播放的视频
		    mediaPlayer.setDataSource("/mnt/sdcard/sun.mp4");
			
			mediaPlayer.setDisplay(mSurfaceHolder);
			mediaPlayer.prepare();
			mediaPlayer.setLooping(true);
			//播放
			mediaPlayer.start();
		} catch (Exception e) {
			Log.e(tag, "kc" , e);
		}
	}

}




你可能感兴趣的:(Android开发自己的锁屏壁纸)