电话相关的Intent操作通常有两种:Intent.ACTION_DIAL和Intent.ACTION_CALL。ACTION_CALL直接调用手机应用并拨打来自Intent的电话号码;而ACTION_DIAL则拨号电话,然后等用户发起通话。使用ACTION_CALL必须声明权限,ACTION_DIAL不需要声明权限。
自己实现的功能是在Fragment中使用隐式Intent打开手机联系人应用,并获取到上一步选择的联系人号码,呼叫联系人的功能。参考第一行代码的相关部分,由于第一行代码中是在活动中设置运行时权限,所以不能直接用。网上百度得到的解决方案是:不要使用ActivityCompat.requestPermissions(...) 而是使用Fragment.requestPermissions(...),改了之后还是报错,因为Fragement中this使用错误,这时声明全局变量private Context mContext;
private Context mContext;
并且在Fragment的onCreate()方法中进行赋值
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity();在Fragment控件的匿名内部类中使用的声明权限方法为: