源码地址
1.Dangerous Permission
Android6.0之后,对于危险级别的权限,需要向用户动态申请,这些危险级别的权限是以组的形式出现的,同一组的任何一个权限被授权了,其他的也自动被授权
2.以拨打电话为例写的一个小demo
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv_phone = (TextView) findViewById(R.id.tv_phone);
tv_phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//检查权限
if (Build.VERSION.SDK_INT >= 23) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
authorize();
}else{
callPhone();
}
}else{
callPhone();
}
}
});
}
/**
* 打电话
*/
@SuppressLint("MissingPermission")
private void callPhone() {
Intent intent = new Intent(Intent.ACTION_CALL);
Uri parse = Uri.parse("tel:" + "12345");
intent.setData(parse);
startActivity(intent);
}
/**
* 授权
*/
private void authorize() {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1001);
}
/**
* 申请权限回调
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 1001){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
//用户授权去拨打电话
callPhone();
}else{
//处理不再询问,弹窗提醒用户
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission.CALL_PHONE)){
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
AlertDialog alertDialog = builder.setMessage("电话权限被拒绝,拨打电话功能不能使用,请到设置中开启")
.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.create();
alertDialog.show();
}
Toast.makeText(MainActivity.this,"拨打电话权限被拒绝",Toast.LENGTH_SHORT).show();
}
return;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
3.Android7.0多窗口
进入多窗口模式的时候activity会的生命周期执行顺序为:onPause-onStop-onDestroy-onCreate-onStart-onResume-onPause
也就是说最后会停留在onPause状态,当再次点击的时候才能获取焦点进入onResume
退出多窗口模式的时候执行顺序:onStop-onDdestroy-onCreate-onStart-onResume-onPause-onResume
4.禁用多窗口
targetSdkVersion >= 24时,在清单文件中的标签中添加 android:resizeableActivity=“false”;当targetSdkVersion <24时,resizeableActivity这个属性无效,那就要设置应用不支持横竖屏切换(只支持竖屏 android:screenOrientation=”portrait”或者只支持横屏 android:screenOrientation=”landscape”)