public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * 为子类提供一个权限检查方法 * @param permissions * @return */ public boolean hasPermissions(String... permissions){ for(String permission:permissions){ if(ContextCompat.checkSelfPermission(this,permission)!= PackageManager.PERMISSION_GRANTED){ return false; } } return true; } /** * 权限申请方法 * @param requestCode * @param permissions */ public void requestPermissions(int requestCode,String... permissions){ ActivityCompat.requestPermissions(this,permissions,requestCode); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case Constant.CALL_PHONE_CODE: if(grantResults[0]==PackageManager.PERMISSION_GRANTED){ doCallPhone(); }else { Toast.makeText(this,"你拒绝了打电话权限",Toast.LENGTH_SHORT).show(); } break; } } /** * 默认的打电话空实现 */ public void doCallPhone() {}
}
public class TestPermissionsActivity extends BaseActivity implements View.OnClickListener{ private Button btnCall,btnDownload; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnCall= (Button) findViewById(R.id.btn_call); btnDownload= (Button) findViewById(R.id.btn_download); btnCall.setOnClickListener(this); btnDownload.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_call: callphone(); break; case R.id.btn_download: break; } } private void callphone() { if(!hasPermissions(Manifest.permission.CALL_PHONE)){ //做权限申请 requestPermissions(Constant.CALL_PHONE_CODE,Manifest.permission.CALL_PHONE); }else { doCallPhone(); } } @Override public void doCallPhone() { Intent intent=new Intent(Intent.ACTION_CALL); Uri data=Uri.parse("tel:"+10086); intent.setData(data); this.startActivity(intent); } }
public class Constant { /** * 权限申请相关 */ public static final int CALL_PHONE_CODE = 0; }