|
|
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方法,用于启动主界面Activity(MainActivity)并关闭当前的欢迎界面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;
|
|
|
}
|
|
|
}
|
|
|
} |