RecyclerView Adapter类中Intent拨打电话失效,如何实现该功能?
在RecyclerView Adapter里实现拨打电话的正确姿势
你的代码思路是对的,但要搞定几个关键细节才能正常运行,下面一步步说:
1. 先处理权限问题
如果用ACTION_CALL直接拨打电话,必须在AndroidManifest.xml里添加权限声明:
<uses-permission android:name="android.permission.CALL_PHONE" />
而且Android 6.0(API 23)及以上的设备,光加Manifest还不够,得动态申请权限——可以在Adapter对应的Activity/Fragment里提前申请,或者在点击事件里先判断权限,没授权就引导用户开启。
要是不想折腾权限,换用ACTION_DIAL就行,这个动作只是打开拨号界面让用户手动确认拨打,不需要任何权限,代码改一行即可:
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNo2));
2. Context的正确用法
你代码里用context.startActivity是对的,但要注意两点:
- 别直接传Activity的强引用,容易造成内存泄漏。直接用点击View的Context就行,也就是
v.getContext(),比单独传全局Context更安全。 - 如果用的是ApplicationContext,记得给Intent加上
FLAG_ACTIVITY_NEW_TASK标记,否则启动会报错:intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3. 完整可运行代码示例
结合空号码判断、权限检查的完整点击事件代码:
callButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String phoneNo2 = itemNumber.getText().toString().trim(); // 先判断号码是否为空 if (phoneNo2.isEmpty()) { Toast.makeText(v.getContext(), "请输入有效号码", Toast.LENGTH_SHORT).show(); return; } // 选择ACTION_DIAL(无需权限)或ACTION_CALL(需权限) Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNo2)); // 如果要用ACTION_CALL,先检查权限 /* if (ContextCompat.checkSelfPermission(v.getContext(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { // 跳转到权限申请页面,需将Context转为Activity调用requestPermissions ActivityCompat.requestPermissions((Activity) v.getContext(), new String[]{Manifest.permission.CALL_PHONE}, 100); return; } intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNo2)); */ // 先判断是否有应用能处理该Intent,防止崩溃 if (intent.resolveActivity(v.getContext().getPackageManager()) != null) { v.getContext().startActivity(intent); } else { Toast.makeText(v.getContext(), "找不到可用的拨号应用", Toast.LENGTH_SHORT).show(); } } });
额外提醒
- 用
v.getContext()能避免内存泄漏,因为View的Context会自动和生命周期绑定。 - 调用
resolveActivity是为了防止极端情况(用户手机无拨号应用)导致崩溃。 - 动态申请权限后,要在对应的Activity/Fragment里重写
onRequestPermissionsResult方法,处理用户授权后的逻辑。
内容的提问来源于stack exchange,提问作者Nahidul Islam Rahmat
相关产品推荐
相关产品推荐

