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);
  }
 }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值