针对平板电脑的android.permission.CALL_PHONE

我正在开发一个应用程序,并在清单中我有:

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

当我点击button来执行此代码:

 Intent intentcall = new Intent(); intentcall.setAction(Intent.ACTION_CALL); intentcall.setData(Uri.parse("tel:" + phonenumber)); // set the Uri startActivity(intentcall); 

它会在手机上运行良好,在平板电脑上它会popup一个显示,您可以查看或添加到联系人的号码。 但是,如果我在清单中保留许可,则不适用于市场上的平板电脑。 我如何保持代码行为,并仍然在平板电脑和手机市场上展示?

关于“使用function”,它会崩溃 – 您是否在实际拨打电话之前检查电话是否可用? 这可能是您需要为应用程序在平板电脑上的情况做额外的步骤。 你在清单中说的是,这个function并不是必需的。 它可能依靠你实际上实现的逻辑。

在AndroidManifest中,您需要:

 <uses-feature android:name="android.hardware.telephony" android:required="false" /> 

CALL_PHONE权限意味着电话是必需的,但如果您指定不是您将不被过滤。

尝试使用Intent.ACTION_DIAL,而不是Intent.ACTION_CALL。

例如:

 try { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phone_number)); startActivity(intent); } catch (Exception e) { //TODO smth } 

在这种情况下,您可以从AndroidManifest.xml中完全删除这些标签:

 <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-feature android:name="android.hardware.telephony" android:required="false" /> 

而不是添加具有ACTION_CALL标识符的用户,请将其更改为ACTION_INSERT_OR_EDIT 。

您也需要这些权限,而不是CALL_PHONE权限:

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

看看这个相关的问题:

在市场上找不到应用程序

从谷歌文档:

声明的元素只是信息,意味着安装应用程序之前,Android系统本身不检查设备上的匹配function支持

用法仅适用于Google Play