当前位置:   article > 正文

Android Activity生命周期,权限设置_activity权限

activity权限
  1. /**
  2. * Activity 生命周期
  3. * 主要有7个方法
  4. * onCreate() 创建,初始化控件,绑定监听器
  5. * onStart() 启动,显示控件到界面上,启动线程/服务
  6. * onResume() 恢复,可以与用户交互,点击,计时器重新开启
  7. * onPause() 暂停,不能与用户交互,保留一些状态,计时器暂停
  8. * onStop() 停止,界面完全看不到的时候
  9. * onRestart() 重启,重新显示控件到界面上
  10. * onDestroy() 销毁,finish(),暂停线程,回收资源
  11. *
  12. * 第一个场景
  13. * 启动Activity
  14. * onCreate-->onStart-->onResume
  15. * 点击Home键
  16. * onPause-->onStop
  17. * 点击最近任务键
  18. * onRestart-->onStart-->onResume
  19. *
  20. * 第二个场景:与其他Activity切换的时候
  21. * 启动第一个Activity
  22. * onCreate-->onStart-->onResume
  23. * 当跳转第二个界面
  24. * 第一个页面 onPause
  25. * 第二个界面 onCreate-->onStart-->onResume
  26. * 第一个界面 onStop
  27. * 第二个页面关闭的时候
  28. * 第二个界面 onPause
  29. * 第一个界面 onRestart-->onStart-->onResume
  30. * 第二个界面 onStop-->onDestroy
  31. * 点击设备的返回键,相当于调用finish()
  32. * 第一个界面点击返回键 onPause-->onStop-->onDestroy
  33. *
  34. *
  35. * 横竖屏切换场景:
  36. * 不影响
  37. * android:screenOrientation="portrait"竖屏 landscape横屏
  38. * 从竖屏-->横屏
  39. * onPause-->onStop-->onDestroy
  40. * onCreate-->onStart-->onResume
  41. * 从横屏-->竖屏
  42. * onPause-->onStop-->onDestroy
  43. * onCreate-->onStart-->onResume
  44. * 如果不每次切换都调用onCreate方法
  45. * 1、重写onConfigurationChanged方法
  46. * 2、在Manifest.xml中设置android:configChanges="keyboardHidden|orientation|screenSize"
  47. *
  48. * if (getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE)判断是否是横屏
  49. if (getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT)判断是否是竖屏
  50. ORIENTATION_LANDSCAPE==2横屏
  51. ORIENTATION_PORTRAIT==1竖屏
  52. ORIENTATION_UNDEFINED==0未定义
  53. *
  54. * 也可创建layout-land 文件(横屏,默认layout文件为竖屏),xml名相同,id也相同
  55. * 系统会自动区分,进行运行
  56. */

在Intent中会涉及到权限的问题

在Manifist中添加

<uses-permission android:name="android.permission.CALL_PHONE"/>

在mainActivity中例如拨打电话

  1. Intent intent=new Intent();
  2. intent.setAction(Intent.ACTION_CALL);//直接拨打电话,系统要求权限
  3. intent.setData(Uri.parse("tel:137864826"));
  4. startActivity(intent);
  1. if (ActivityCompat.checkSelfPermission(this,permissions[0])
  2. == PackageManager.PERMISSION_GRANTED)//判断是否有权限

 这是自己定义的方法:也可以不用

  1. public void checkAndRequestPermission(){//权限申请
  2. String[] permissions=new String[]{"android.permission.CALL_PHONE"};
  3. if (ActivityCompat.checkSelfPermission(this,permissions[0])
  4. == PackageManager.PERMISSION_GRANTED){
  5. //有权限
  6. call();
  7. } else{
  8. //没有权限,进行权限申请
  9. ActivityCompat.requestPermissions(this,permissions,REQUEST_PERMISSION_CALL_PHONE);
  10. }
  11. }

在 avtivity中重写onRequestPermissionsResult()方法,此方法为,权限结果返回后的处理方法

  1. //请求权限获取结果时调用
  2. @Override
  3. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  4. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  5. Log.d("onRequestPermissionsResult",""+grantResults[0]);
  6. if (requestCode==REQUEST_PERMISSION_CALL_PHONE){
  7. if ("android.permission.CALL_PHONE".equals(permissions[0])
  8. &&grantResults[0]==PackageManager.PERMISSION_GRANTED){
  9. // Log.d("onRequestPermissionsResult",""+permissions[0]);
  10. }else {
  11. Toast.makeText(this, "您尚未开启权限,部分功能可能会受影响", Toast.LENGTH_LONG).show();
  12. }
  13. }
  14. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号