Android Activity生命周期,权限设置

/**
     * Activity 生命周期
     *  主要有7个方法
     *  onCreate() 创建,初始化控件,绑定监听器
     *  onStart()   启动,显示控件到界面上,启动线程/服务
     *  onResume()  恢复,可以与用户交互,点击,计时器重新开启
     *  onPause()   暂停,不能与用户交互,保留一些状态,计时器暂停
     *  onStop()    停止,界面完全看不到的时候
     *  onRestart() 重启,重新显示控件到界面上
     *  onDestroy() 销毁,finish(),暂停线程,回收资源
     *
     *  第一个场景
     *  启动Activity
     *      onCreate-->onStart-->onResume
     *  点击Home键
     *      onPause-->onStop
     *  点击最近任务键
     *       onRestart-->onStart-->onResume
     *
     *   第二个场景:与其他Activity切换的时候
     *   启动第一个Activity
     *            onCreate-->onStart-->onResume
     *    当跳转第二个界面
     *             第一个页面    onPause
     *             第二个界面    onCreate-->onStart-->onResume
     *             第一个界面    onStop
     *     第二个页面关闭的时候
     *              第二个界面   onPause
     *              第一个界面   onRestart-->onStart-->onResume
     *              第二个界面   onStop-->onDestroy
     *     点击设备的返回键,相当于调用finish()
     *     第一个界面点击返回键   onPause-->onStop-->onDestroy
     *
     *
     *  横竖屏切换场景:
     *      不影响
     *          android:screenOrientation="portrait"竖屏 landscape横屏
     *     从竖屏-->横屏
     *            onPause-->onStop-->onDestroy
     *            onCreate-->onStart-->onResume
     *      从横屏-->竖屏
     *             onPause-->onStop-->onDestroy
     *             onCreate-->onStart-->onResume
     *     如果不每次切换都调用onCreate方法
     *         1、重写onConfigurationChanged方法
     *         2、在Manifest.xml中设置android:configChanges="keyboardHidden|orientation|screenSize"
     *
     *      if (getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE)判断是否是横屏
           if (getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT)判断是否是竖屏
                ORIENTATION_LANDSCAPE==2横屏
                ORIENTATION_PORTRAIT==1竖屏
                ORIENTATION_UNDEFINED==0未定义
     *
     *      也可创建layout-land 文件(横屏,默认layout文件为竖屏),xml名相同,id也相同
     *      系统会自动区分,进行运行
     */

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

在Manifist中添加

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

在mainActivity中例如拨打电话

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

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

public void checkAndRequestPermission(){//权限申请
        String[] permissions=new String[]{"android.permission.CALL_PHONE"};

        if (ActivityCompat.checkSelfPermission(this,permissions[0])
            == PackageManager.PERMISSION_GRANTED){
            //有权限
            call();
        } else{
            //没有权限,进行权限申请
            ActivityCompat.requestPermissions(this,permissions,REQUEST_PERMISSION_CALL_PHONE);

        }
    }

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

//请求权限获取结果时调用

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        Log.d("onRequestPermissionsResult",""+grantResults[0]);
        if (requestCode==REQUEST_PERMISSION_CALL_PHONE){
                if ("android.permission.CALL_PHONE".equals(permissions[0])
                &&grantResults[0]==PackageManager.PERMISSION_GRANTED){
//                    Log.d("onRequestPermissionsResult",""+permissions[0]);
                }else {
                    Toast.makeText(this, "您尚未开启权限,部分功能可能会受影响", Toast.LENGTH_LONG).show();
                }
        }
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值