平板电脑的android.permission.CALL_PHONE

时间:2011-10-24 23:00:21

标签: android permissions

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

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

当我点击按钮执行此代码时:

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

它可以在手机上正常运行,在平板电脑上弹出一个显示屏,您可以在其中查看或添加号码给联系人。但是,如果我将权限保留在清单中,则不适用于市场中的平板电脑。如何保持代码行为并仍然在平板电脑和手机市场上展示?

5 个答案:

答案 0 :(得分:57)

在AndroidManifest中,您需要:

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

CALL_PHONE权限意味着需要电话,但如果您指定不是,则不会过滤。

答案 1 :(得分:34)

尝试使用 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" />

答案 2 :(得分:6)

关于“使用功能”并且崩溃 - 您是否在实际拨打电话之前检查电话是否可用?当应用程序在平板电脑上时,您可能需要执行额外的步骤。您在清单中所说的只是该功能不是必需的。它可能依赖于你实际实现围绕它的逻辑。

答案 3 :(得分:3)

不是添加具有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>

看看这个相关的问题:

can't find app on market

答案 4 :(得分:0)

来自google docs:

  

声明的元素仅供参考,意思是   Android系统本身不检查匹配的功能支持   在安装应用程序之前在设备上

仅适用于Google Play