热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android实现音乐播放器锁屏页

这篇文章主要为大家详细介绍了Android实现音乐播放器锁屏页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android音乐播放器锁屏页的具体代码,供大家参考,具体内容如下

首页我们先看一下效果图

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

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

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

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

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

 

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

@Override
protected 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);    
  }  
 }
}

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

@Override
public void onBackPressed() {}

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

@Override
public 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) = 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
@Override
public IBinder onBind(Intent intent) {  
  return null;
}
@Override
public 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、魅族等一些手机会有锁屏显示的权限,默认是关闭的,需要手动打开。

demo地址:LockDemo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文是关于自学Android的笔记,包括查看类的源码的方法,活动注册的必要性以及布局练习的重要性。通过学习本文,读者可以了解到在自学Android过程中的一些关键点和注意事项。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
霸气小米鱼鱼_156
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有