我正在开发一个应用程序,并且在清单中我有:
<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);
它可以在手机上正常运行,在平板电脑上弹出一个显示屏,您可以在其中查看或添加号码给联系人。但是,如果我将权限保留在清单中,则不适用于市场中的平板电脑。如何保持代码行为并仍然在平板电脑和手机市场上展示?
答案 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>
看看这个相关的问题:
答案 4 :(得分:0)
来自google docs:
声明的元素仅供参考,意思是 Android系统本身不检查匹配的功能支持 在安装应用程序之前在设备上
仅适用于Google Play