代码改变世界

动态请求权限

2019-06-28 13:34  Spiderman25  阅读(111)  评论(0)    收藏  举报
package com.youzuan.shop;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.google.gson.Gson;
import com.youzuan.shop.activity.BaseActivity;
import com.youzuan.shop.config.HttpAddress;
import com.youzuan.shop.http.HttpRequest;
import com.youzuan.shop.http.OkGoEngine;
import com.youzuan.shop.model.BusinessBankCard;
import com.youzuan.shop.model.Shop;
import com.youzuan.shop.model.ShopResult;
import com.youzuan.shop.model.Store;
import com.youzuan.shop.model.User;
import com.youzuan.shop.util.ToDo;
import com.youzuan.shop.views.SelectedButton;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

import static android.content.pm.PackageManager.PERMISSION_GRANTED;

public class MainActivity extends BaseActivity {
    @BindView(R.id.name)
    EditText name;
    @BindView(R.id.province)
    EditText province;
    @BindView(R.id.address)
    EditText address;
    @BindView(R.id.mobile)
    EditText mobile;
    @BindView(R.id.bankname)
    EditText bankname;
    @BindView(R.id.accountnumber)
    EditText accountnumber;
    @BindView(R.id.username)
    EditText username;
    @BindView(R.id.password)
    EditText password;
    @BindView(R.id.confirmPassword)
    EditText confirmPassword;
    @BindView(R.id.iv_noLoan)
    ImageView ivNoLoan;
    @BindView(R.id.ll_noLoan)
    LinearLayout llNoLoan;
    @BindView(R.id.iv_loan)
    ImageView ivLoan;
    @BindView(R.id.ll_loan)
    LinearLayout llLoan;
    @BindView(R.id.iv_shop)
    ImageView ivShop;
    @BindView(R.id.bt_add)
    SelectedButton btAdd;
    HttpRequest httpRequest;

    @Override
    protected void loadLayout(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        httpRequest=new HttpRequest(this);
    }

    @Override
    protected void initView() {

    }

    @Override
    protected void loadData() {

    }

    @OnClick({R.id.ll_noLoan, R.id.ll_loan, R.id.iv_shop, R.id.bt_add})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.ll_noLoan:
                break;
            case R.id.ll_loan:
                break;
            case R.id.iv_shop:
                break;
            case R.id.bt_add:
                Shop shop=new Shop();

                BusinessBankCard businessBankCard=new BusinessBankCard();
                businessBankCard.setAccountnumber("54654");
                businessBankCard.setBankname("DS");
                businessBankCard.setBid("0");
                businessBankCard.setCreatetime("0");
                businessBankCard.setId("0");

                Store store=new Store();
                store.setAddress("df");
                store.setName("dfs");
                store.setProvince("dfs");
                store.setIcon("http://cdn.youzuanzb.com/1561604696000");
                store.setLoan(0);
                store.setLat("23");
                store.setLng("123");

                User user=new User();
                user.setUsername("dfs");
                user.setPassword("dfs");
                user.setMobile("13790445950");
                user.setCreateuser("dfsfd");

                shop.setBusinessBankCard(businessBankCard);
                shop.setStore(store);
                shop.setUser(user);
                Gson gson=new Gson();
                String s = gson.toJson(shop);
                //httpRequest.request(HttpAddress.createShop,new HashMap<String, Object>(),HttpAddress.createShop,ShopResult.class);
                if(checkPermission(this,new String[]{Manifest.permission.CAMERA},REQUEST_CODE_PERMISSION)){
                    Toast.makeText(this,"已获得所有权限",Toast.LENGTH_LONG).show();
                }
                //httpRequest.request(HttpAddress.createShop,s,HttpAddress.createShop, ShopResult.class);
                break;
        }
    }

    @Override
    public void receiveHttpError(String error, String dataType) {
        Toast.makeText(this,error,Toast.LENGTH_LONG);
    }

    @Override
    public void setViewData(Object object, String dataType) {
        ShopResult shopResult= (ShopResult) object;
        Toast.makeText(this,shopResult.getQrcode(),Toast.LENGTH_LONG).show();
    }

    private static final int REQUEST_CODE_PERMISSION=0x112;

    public static boolean checkPermission(Activity activity, String [] ps, int requestCode) {
        boolean isGranted = true;
        if (android.os.Build.VERSION.SDK_INT >= 23) {
            for(String p:ps){
                if (activity.checkSelfPermission(p) != PERMISSION_GRANTED) {
                    isGranted = false;
                }
            }
            if (!isGranted) {
                activity.requestPermissions(ps,
                        requestCode);
            }
        }
        return isGranted;
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        List<String> notPassPermissions=new ArrayList<>();//没有通过的权限
        for (int i = 0; i < permissions.length; i++) {
            if (grantResults[i] == PERMISSION_GRANTED) {
                Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show();
            } else {
                notPassPermissions.add(permissions[i]);
                Toast.makeText(this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show();
            }
        }
        String[] strings = new String[notPassPermissions.size()];
        notPassPermissions.toArray(strings);
        if(notPassPermissions.isEmpty()){
            //做应用的事
            switch (requestCode){
                case REQUEST_CODE_PERMISSION:
                    Toast.makeText(this,"已获得所有权限",Toast.LENGTH_LONG).show();
                    break;
                default:
                    break;
            }
        }else if(!shouldGoToSetting(strings)){
            checkPermission(this, strings,REQUEST_CODE_PERMISSION);
        }
    }
    /**
     * 如果有被永久禁止的权限就会跳到设置页面并返回true
     * @param permissions
     * @return
     */
    private boolean shouldGoToSetting(String[] permissions){
        boolean neverAlert=false;//是否有以后不再提醒的权限
        List<String> neverAlertPermissions=new ArrayList<>();//以后不再提醒的权限
        for(String p:permissions){
            if(!ActivityCompat.shouldShowRequestPermissionRationale(this,p)){
                neverAlert=true;
                neverAlertPermissions.add(p);
            }
        }
        if (neverAlert) {
            StringBuffer nap=new StringBuffer();
            for(String p:neverAlertPermissions){
                nap.append(p+",");
            }
            Toast.makeText(this,"不再弹出的权限有:"+nap.toString(),Toast.LENGTH_LONG).show();
            Uri packageURI = Uri.parse("package:" + getPackageName());
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
            this.startActivity(intent);
            return true;
        }else{
            return false;
        }
    }
}