千家信息网

Android如何实现音乐播放器锁屏页

发表于:2024-10-27 作者:千家信息网编辑
千家信息网最后更新 2024年10月27日,这篇文章主要为大家展示了"Android如何实现音乐播放器锁屏页",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Android如何实现音乐播放器锁屏页"这篇
千家信息网最后更新 2024年10月27日Android如何实现音乐播放器锁屏页

这篇文章主要为大家展示了"Android如何实现音乐播放器锁屏页",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Android如何实现音乐播放器锁屏页"这篇文章吧。

具体内容如下

实现逻辑,其主要思路就是新建一个activity使其覆盖在锁屏页上边。

一、我们新建一个LockActivty,既然是四大组件之一,必不可少的在AndroidManifest.xml中注册:

这里注意,LockActivty的启动模式,我们使用singleInstance,使其单独存在一个activity task中。

android:exported="false"标签,这个标签是用来表示不能被其他应用程序组件调用或跟它交互。

android:noHistory="true",表示该Activity在task中不留历史痕迹。style文件如下:

二、在LockActivty的onCreate方法中添加标志,使其能够在锁屏页上显示:

@Overrideprotected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);   fullScreen(this);   setContentView(R.layout.activity_lock);}

这里同时也加入全屏的代码fullScreen(this):

public static void fullScreen(Activity activity) {  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {      //5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色      Window window = activity.getWindow();      View decorView = window.getDecorView();      //两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间      int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN             | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;      decorView.setSystemUiVisibility(option);      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);      window.setStatusBarColor(Color.TRANSPARENT);  } else {    Window window = activity.getWindow();    WindowManager.LayoutParams attributes = window.getAttributes();    int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;    attributes.flags |= flagTranslucentStatus;    window.setAttributes(attributes);  } }}

三、重写物理返回键使其不能响应返回键。

@Overridepublic void onBackPressed() {}

四、向右滑动销毁页面,这里我们要用到触摸反馈的知识,自定义一个SlidingFinishLayout的view继承RelativeLayout在LockActivity的布局文件中引用,这里重写onTouchEvent方法:

@Overridepublic boolean onTouchEvent(MotionEvent event) {  switch (event.getActionMasked()) {    case MotionEvent.ACTION_DOWN:      downX = tempX = (int) event.getRawX();      downY = (int) event.getRawY();      break;    case MotionEvent.ACTION_MOVE:      int moveX = (int) event.getRawX();      int deltaX = tempX - moveX;      tempX = moveX;      if (Math.abs(moveX - downX) > mTouchSlop        && Math.abs((int) event.getRawY() - downY) < mTouchSlop) {        isSliding = true;      }      if (moveX - downX >= 0 && isSliding) {        mParentView.scrollBy(deltaX, 0);      }      break;    case MotionEvent.ACTION_UP:      i      sSliding = false;      if (mParentView.getScrollX() <= -viewWidth / 4) {      isFinish = true;      scrollRight();      } else {         scrollOrigin();         isFinish = false;       }      break;    default:    break;  }  return true;}

这里只贴出了主要代码,详细代码请看demo,文章末尾会有demo地址。

五、关于下方滑动解锁text的实现,是利用了颜色渐变器和矩阵平移实现:

public class HintTextView extends AppCompatTextView {  private Paint paint;  private int mWidth;  private LinearGradient gradient;  private Matrix matrix;  /**   * 渐变的速度   */  private int deltaX;   public HintTextView(Context context) {    super(context, null);  }   public HintTextView(Context context, AttributeSet attrs) {    super(context, attrs);  }    {  paint = getPaint();  }   @Override  protected void onSizeChanged(int w, int h, int oldw, int oldh) {    super.onSizeChanged(w, h, oldw, oldh);    if(mWidth == 0 ){      mWidth = getMeasuredWidth();      //颜色渐变器      gradient = new LinearGradient(0, 0, mWidth, 0, new int[]{Color.GRAY, Color.WHITE, Color.GRAY},      new float[]{0.3f,0.5f,1.0f},      Shader.TileMode.CLAMP);      paint.setShader(gradient);      matrix = new Matrix();      }  }  @Override  protected void onDraw(Canvas canvas) {    super.onDraw(canvas);    if(matrix !=null){      deltaX += mWidth / 8;      if(deltaX > 2 * mWidth){        deltaX = -mWidth;       }    }    //通过矩阵的平移实现    matrix.setTranslate(deltaX, 0);    gradient.setLocalMatrix(matrix);    postInvalidateDelayed(100);  }}

六、最后我们首先新建一个service做接收锁屏键事件的逻辑,使其启动后在任何页面都可以响应锁屏事件让LockActivity出现在锁屏页面上。

1、在AndroidManifest.xml中注册service:

2、在service中注册广播接收锁屏事件,并跳转锁屏页面:

ScreenBroadcastReceiver screenBroadcastReceiver;@Nullable@Overridepublic IBinder onBind(Intent intent) {  return null;}@Overridepublic void onCreate() {  super.onCreate();  screenBroadcastReceiver = new ScreenBroadcastReceiver();  final IntentFilter filter = new IntentFilter();  filter.addAction(Intent.ACTION_SCREEN_OFF);  registerReceiver(screenBroadcastReceiver, filter);}public class ScreenBroadcastReceiver extends BroadcastReceiver {  @Override  public void onReceive(Context context, Intent intent) {    handleCommandIntent(intent);    }  }private void handleCommandIntent(Intent intent) {  final String action = intent.getAction();  if (Intent.ACTION_SCREEN_OFF.equals(action) ){    Intent lockScreen = new Intent(this, LockActivity.class);    lockScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    startActivity(lockScreen);    }  }  @Override  public void onDestroy() {    super.onDestroy();    unregisterReceiver(screenBroadcastReceiver); }

这样,锁屏页面的实现就大概完成了,有一点要注意的是像小米、vivo、魅族等一些手机会有锁屏显示的权限,默认是关闭的,需要手动打开。

以上是"Android如何实现音乐播放器锁屏页"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容 页面 播放器 音乐 事件 代码 篇文章 颜色 文件 方法 标签 知识 矩阵 系统 组件 逻辑 学习 帮助 平移 应用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 linux php服务器架设 如何找到数据在数据库的位置 小型软件开发高性价比的选择 深圳领创集团软件开发怎么样 软件开发理论基础 通信网络技术报价 数据库时间整点怎么显示 服务器太卡能进安全模式里删除吗 腾讯云服务器数据库如何使用 幼儿园9.18网络安全宣传 软件开发工作中存在的不足 登录服务器未响应 您可能 服务器背包神器 安擎服务器有哪些品牌 包头线上php软件开发 坦克世界更新服务器失败 网络软件开发公司 做账要求 网络技术应用是干什么的 网络技术出来都是干什么的 软件开发负责人工资如何考核 网络安全法应当遵守有关规定 客户端与服务器通信报文 中国网络安全厂商 测试过程中数据库问题报文没问题 魔兽世界迅捷服务器怎么样 人社局网络安全应急演练总结 广州诺特软件开发 庆阳市网络安全工作会议 安擎服务器有哪些品牌 浙江服务器虚拟化安装
0