【问题标题】:Permission required when using Intent to call phone?使用 Intent 拨打电话时需要权限吗?
【发布时间】:2011-11-07 19:15:01
【问题描述】:

在我的一个应用中,我使用以下代码拨打电话:

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(...)); 
startActivity(intent);

文档说我确实需要以下清单权限才能这样做:

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

这真的需要吗?我不明白手机和相机功能之间的区别。使用电话意图时,我确实需要权限,但我不需要相机意图的权限:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
...
startActivityForResult(intent, 1);

是否有关于在意图的帮助下触发时需要许可的硬件功能和不需要许可的硬件功能列表?

【问题讨论】:

    标签: android permissions android-intent


    【解决方案1】:

    其实,如果你只是想用特定的电话号码打开拨号器,而不是直接呼叫(需要用户确认),你可以在没有任何权限的情况下这样做:

    Uri uri = Uri.parse("tel:" + PHONE_NUMBER);
    Intent callIntent = new Intent(Intent.ACTION_DIAL, uri);
    try {
        context.startActivity(callIntent);
    } catch (ActivityNotFoundException activityNotFoundException) {
        // TODO: place code to handle users that have no call application installed, otherwise the app crashes
    }
    

    【讨论】:

    • 这解决了我的问题。这将使用户能够控制发生的事情。
    【解决方案2】:

    这真的需要吗?

    是的。

    我不明白手机和相机功能之间的区别。

    电话会让人花钱。因此,如果您直接拨打电话(而不是 ACTION_DIAL 只是将号码输入拨号程序),Android 希望用户提前同意允许这样做。

    用相机拍照通常不会直接花费用户任何钱。

    是否有关于在意图的帮助下触发时需要许可的硬件功能和不需要许可的硬件功能列表?

    不是真的。

    【讨论】:

    • 非常感谢。我现在明白了。
    • 现在偶然发现了这个答案。是否应该使用以下链接更新(最后一部分):developer.android.com/guide/topics/manifest/…
    • @Shaihi:不是这样。 OP 真的在问 Intent 操作意味着某些权限,您提供的链接没有涵盖这些权限。
    • @CommonsWare 我认为 Intent.ACTION_CALL 无需 CALL_PHONE 许可即可工作。但 ACTION_DIAL 需要权限。
    • @droidev:你倒退了。 ACTION_DIAL 不需要权限,因为它实际上并没有拨打电话。 ACTION_CALL 确实需要权限。
    【解决方案3】:

    当您向相机发出请求时,它只会打开一个需要用户交互的应用,然后它才能执行任何操作。

    电话会打开一个应用程序,其中已经输入了电话号码,因此您只需按一个按钮。

    与不小心拍照相比,您不小心打电话给某人的风险要高得多(如果不小心拍照,您可以删除。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2019-10-25
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2018-12-25
      相关资源
      最近更新 更多