平板电脑的android.permission.CALL_PHONE

mou*_*907 36 permissions android

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

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Kev*_*oil 58

在AndroidManifest中,您需要:

<uses-feature android:name="android.hardware.telephony" android:required="false" />
Run Code Online (Sandbox Code Playgroud)

CALL_PHONE许可意味着需要电话,但如果你指定是不是你将不会被过滤.

  • 我想我没有提到如果我这样做,上面的代码会在单击按钮时导致崩溃. (2认同)

val*_*dak 35

尝试使用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       
}
Run Code Online (Sandbox Code Playgroud)

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

<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Run Code Online (Sandbox Code Playgroud)

  • 不需要任何许可的好答案 (3认同)

use*_*489 6

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

  • 好吧,我必须检查我在做什么......我最初这样做:boolean hasPhone = getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY); 但我告诉自己,这可能会在某些手机上出现问题.你在用什么 (2认同)