WelcomeActivity.java 9.45 KB
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<String> 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);
	}

}