public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActivityCollector.addActicity(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); } public void buttonClick(View view) { switch (view.getId()){ case R.id.button: requestRunTimePression(new String[]{Manifest.permission.CALL_PHONE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, new PressionListener() { @Override public void onGranted() { Toast.makeText(MainActivity.this,"OKOKOKOK",Toast.LENGTH_SHORT).show(); } @Override public void onFailure(List<String> failurePression) { for (int i = 0; i < failurePression.size(); i++) { Toast.makeText(MainActivity.this,"NONONO"+failurePression.get(i),Toast.LENGTH_SHORT).show(); } } }); break; default: break; } } }
public class BaseActivity extends AppCompatActivity { private static PressionListener mListener; @Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); ActivityCollector.addActicity(this); } public static void requestRunTimePression(String [] pression, PressionListener listener){ mListener = listener; Activity topActivity = ActivityCollector.getTopActivity(); List<String> pressionList = new ArrayList<>(); for (int i = 0; i < pression.length; i++) { if(ContextCompat.checkSelfPermission(topActivity,pression[i])!= PackageManager.PERMISSION_GRANTED){ pressionList.add(pression[i]); } } if(!pressionList.isEmpty()){ ActivityCompat.requestPermissions(topActivity,pressionList.toArray(new String [pressionList.size()]),1); }else{ //do something mListener.onGranted(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); List<String> failureList = new ArrayList<>(); switch (requestCode){ case 1: if(grantResults.length>0){ for (int i = 0; i < grantResults.length; i++) { int granted = grantResults[i]; String pression = permissions[i]; if(granted!=PackageManager.PERMISSION_GRANTED){ failureList.add(pression); } } if(failureList.isEmpty()){ mListener.onGranted(); }else{ mListener.onFailure(failureList); } } break; default: break; } } @Override protected void onDestroy() { ActivityCollector.removeActivity(this); super.onDestroy(); } }
public class ActivityCollector { private static List<Activity> activityList = new ArrayList<>(); public static void addActicity(Activity activity){ activityList.add(activity); } public static void removeActivity(Activity activity){ activityList.remove(activity); } public static Activity getTopActivity(){ if(activityList.isEmpty()){ return null; }else{ return activityList.get(activityList.size()-1); } } }
public interface PressionListener { //授权成功的接口 void onGranted(); //授权失败的接口 void onFailure(List<String> failurePression); }