package com.ectrip.cyt.ui; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import android.Manifest; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.Settings; //import android.support.v4.app.ActivityCompat; //import android.support.v4.content.ContextCompat; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.view.KeyEvent; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.Toast; import com.ectrip.cyt.constant.LogoType; import com.ectrip.cyt.constant.constant; import com.ectrip.cyt.utils.LogUtil; import com.ectrip.trips.check.R; public class WelcomeActivity extends BaseActivity { public final String TAG = "WelcomeActivity"; private ImageView welcomeBg; private static final int REQUEST_STORAGE_PERMISSION = 100; private static final int REQUEST_MANAGE_STORAGE = 101; private static final int INSTALL_PERMISS_CODE = 102; private String[] permissions = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.app_welcome); initView(); // Access(); isScreenChange(); checkFilePermissions(); } private void initView(){ welcomeBg=(ImageView) findViewById(R.id.welcomeBg); if(constant.logoMark==LogoType.CYT.getValue()){ setImg(welcomeBg, R.drawable.welcome_bg_cyt); }else if(constant.logoMark==LogoType.QNE.getValue()){ setImg(welcomeBg, R.drawable.welcome_bg_qne); } } public boolean isScreenChange() { Configuration mConfiguration = this.getResources().getConfiguration(); // 获取设置的配置信息 int ori = mConfiguration.orientation; // 获取屏幕方向 if (ori == mConfiguration.ORIENTATION_LANDSCAPE) { System.out.println("横屏"); // 横屏 return true; } else if (ori == mConfiguration.ORIENTATION_PORTRAIT) { System.out.println("竖屏"); // 竖屏 return false; } return false; } @SuppressWarnings("deprecation") private void setImg(ImageView imageView,int drawableId){ BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; InputStream is = getResources().openRawResource(drawableId); Bitmap bm = BitmapFactory.decodeStream(is, null, opt); if(bm!=null){ imageView.setScaleType(ScaleType.CENTER_CROP); imageView.setImageBitmap(bm); } } private class ActivityTask extends TimerTask { private Class activity; public ActivityTask(Class activity) { this.activity = activity; } @Override public void run() { if (!WelcomeActivity.this.isFinishing()) { Intent intent = new Intent(WelcomeActivity.this, this.activity); startActivity(intent); WelcomeActivity.this.finish(); } } } private void checkFilePermissions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Android 11+ if (!Environment.isExternalStorageManager()) { showManageStorageDialog(); } else { // 已有权限 LogUtil.d(TAG, "Android 11+已有权限"); requestPermission(); } } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0-10 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, permissions, REQUEST_STORAGE_PERMISSION); } else { // 已有权限 LogUtil.d(TAG, "已有权限"); requestPermission(); } } else { // Android 5.1及以下,无需动态申请 } } private void showManageStorageDialog() { new AlertDialog.Builder(this) .setTitle("需要文件访问权限") .setMessage("本应用需要访问设备上的文件以提供完整功能") .setPositiveButton("去设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(Uri.parse("package:" + getPackageName())); startActivityForResult(intent, REQUEST_MANAGE_STORAGE); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); System.exit(0); } }) .show(); } private void requestPermission() { List permissionsNeeded = new ArrayList<>(); if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED) { permissionsNeeded.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) { permissionsNeeded.add(Manifest.permission.CAMERA); } if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { permissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { permissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE); } if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED) { permissionsNeeded.add(Manifest.permission.READ_PHONE_STATE); } // if (ContextCompat.checkSelfPermission(this, Manifest.permission.MANAGE_EXTERNAL_STORAGE) // == PackageManager.PERMISSION_DENIED) { // permissionsNeeded.add(Manifest.permission.MANAGE_EXTERNAL_STORAGE); // } if (permissionsNeeded.size() > 0) { ActivityCompat.requestPermissions(this, permissionsNeeded.toArray(new String[permissionsNeeded.size()]), 1); } else { Access(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case 1: { boolean allowed = true; if (grantResults.length > 0) { for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { allowed = false; } } } if (!allowed) { Toast.makeText(this, "部分权限被拒绝,可能无法正常使用系统!", Toast.LENGTH_SHORT).show(); } Access(); break; } } } @RequiresApi(api = Build.VERSION_CODES.R) @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_MANAGE_STORAGE) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Environment.isExternalStorageManager()) { // 用户已授予权限 LogUtil.d(TAG, "用户已授予文件权限"); // requestPermission(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { boolean haveInstallPermission = getPackageManager().canRequestPackageInstalls(); LogUtil.d(TAG, "haveInstallPermission = " + haveInstallPermission); if (!haveInstallPermission) { //弹框提示用户手动打开 new AlertDialog.Builder(getBaseContext()) .setTitle("安装权限") .setMessage("需要打开允许来自此来源,请去设置中开启此权限") .setPositiveButton("去设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //此方法需要API>=26才能使用 // toInstallPermissionSettingIntent(); } } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .show(); } else { requestPermission(); } } else { requestPermission(); } } else { // 用户拒绝授予权限 LogUtil.d(TAG, "用户拒绝授予文件权限"); } } } else if (requestCode == INSTALL_PERMISS_CODE) { if (Environment.isExternalStorageManager()) { // 用户已授予权限 LogUtil.d(TAG, "用户已授予应用安装权限"); requestPermission(); } else { // 用户拒绝授予权限 LogUtil.d(TAG, "用户拒绝授予应用安装权限"); } } } @Override protected void initNet() { } private void Access() { new Timer().schedule(new ActivityTask(MainActivity.class), 2000); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return false; } return super.onKeyDown(keyCode, event); } }