You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
test-music/app/src/main/java/com/example/musicplayer/view/WelcomeActivity.java

84 lines
5.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.example.musicplayer.view;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import com.example.musicplayer.R;
import com.example.musicplayer.adapter.SongAdapter;
import com.example.musicplayer.util.CommonUtil;
// WelcomeActivity类继承自AppCompatActivity是安卓应用中用于展示欢迎界面的Activity类
// 在这里主要负责处理欢迎界面相关的初始化操作、权限申请以及跳转到主界面的逻辑。
public class WelcomeActivity extends AppCompatActivity {
// 重写onCreate方法该方法在Activity创建时被调用用于进行各种初始化操作例如设置界面布局、申请权限等。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 调用工具类CommonUtil中的方法隐藏状态栏传入true表示隐藏状态栏使欢迎界面能够全屏展示具体效果取决于CommonUtil中方法的实现逻辑
CommonUtil.hideStatusBar(this, true);
// 将窗口的背景Drawable设置为null可能是为了实现某种特定的背景效果比如透明背景等具体需结合应用整体的UI设计来看
getWindow().setBackgroundDrawable(null);
// 设置该Activity的界面布局为activity_welcome通过加载对应的布局资源文件来定义界面的外观和包含的控件等内容。
setContentView(R.layout.activity_welcome);
// 申请权限部分检查应用是否已经获取了写入外部存储的权限Manifest.permission.WRITE_EXTERNAL_STORAGE
// 如果没有获取到该权限ContextCompat.checkSelfPermission返回的结果不等于PackageManager.PERMISSION_GRANTED
// 则通过ActivityCompat.requestPermissions方法向用户请求该权限传入当前Activity实例、需要请求的权限数组这里只请求了写入外部存储权限以及请求码用于在权限申请结果回调中区分不同的权限申请
if (ContextCompat.checkSelfPermission(WelcomeActivity.this, Manifest.permission.
WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(WelcomeActivity.this, new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
} else {
// 如果已经获取了写入外部存储的权限通过Handler发送一个延迟消息延迟2000毫秒2秒后执行相应操作这里会调用getHome方法跳转到主界面。
mHandler.sendEmptyMessageDelayed(0, 2000);
}
}
// 创建一个Handler对象用于处理消息在这里主要用于在合适的时机延迟2秒后或者权限申请成功后执行跳转到主界面的操作。
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 调用getHome方法该方法用于启动主界面Activity并关闭当前的欢迎界面Activity实现页面跳转。
getHome();
super.handleMessage(msg);
}
};
// 定义getHome方法用于启动主界面ActivityMainActivity并关闭当前的欢迎界面Activity实现从欢迎界面跳转到应用主界面的功能。
private void getHome() {
startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
finish();
}
// 重写onRequestPermissionsResult方法该方法用于处理权限申请的结果回调根据用户是否授予权限来执行不同的逻辑。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
// 如果请求码为1对应之前请求写入外部存储权限时设置的请求码并且权限授予结果数组长度大于0且第一个元素对应写入外部存储权限的授予结果为PackageManager.PERMISSION_GRANTED表示权限已授予
// 则通过Handler发送一个延迟消息延迟2000毫秒2秒后执行相应操作这里同样会调用getHome方法跳转到主界面。
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mHandler.sendEmptyMessageDelayed(0, 2000);
} else {
// 如果权限被拒绝通过Toast显示一个提示信息告知用户拒绝该权限将无法使用程序然后调用finish方法关闭当前的欢迎界面Activity。
Toast.makeText(this, "拒绝该权限无法使用该程序", Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
break;
}
}
}