Context.checkCallingPermission检查总是失败?

时间:2016-06-20 15:54:57

标签: android permissions android-permissions

我在Android中遇到这种情况。 应用... <div class="swal2-container"> <div class="swal2-overlay" tabindex="-1"></div> <div class="swal2-modal" style="display: none; width: 500px; padding: 20px; margin-left: -250px; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial;" tabindex="-1"> <div class="swal2-icon swal2-error" style="display: none;"> <span class="x-mark"> <span class="line left"></span> <span class="line right"></span> </span> </div> <div class="swal2-icon swal2-question" style="display: none;">?</div> <div class="swal2-icon swal2-warning pulse-warning" style="display: block;">!</div> <div class="swal2-icon swal2-info" style="display: none;">i</div> <div class="swal2-icon swal2-success" style="display: none;"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div> <img class="swal2-image" style="display: none;"> <h2>Are you sure?</h2> <div class="swal2-content" style="display: none;"></div> <input class="swal2-input"> <select class="swal2-select"></select> <div class="swal2-radio"></div> <label for="swal2-checkbox" class="swal2-checkbox"> <input type="checkbox" id="swal2-checkbox"></label> <textarea class="swal2-textarea"></textarea> <div class="swal2-validationerror"></div> <hr class="swal2-spacer" style="display: block;"> <button class="swal2-confirm styled" style="background-color: rgb(221, 107, 85);">Yes</button> <button class="swal2-cancel styled" style="display: inline-block; background-color: rgb(170, 170, 170);">No</button> <span class="swal2-close" style="display: none;">×</span> </div> </div> 拥有权限A以获取一些信息。它不是直接获取此信息,而是向App PERM内的一个BroadCastReceiver发送意图(当然BB)。为了确保PERM等所有此类应用都拥有权限,我使用了context.checkCallingPermission(在this answer的帮助下)。

然而它总是失败。

A

特别是,当我从public void onReceive(Context context, Intent intent) { String info; String perm = Manifest.permission.READ_PHONE_STATE; Log.i(TAG, "callPid="+ Binder.getCallingPid()+" myPid="+ Process.myPid()); /// SAME PID if (context.checkCallingPermission(perm) != PackageManager.PERMISSION_GRANTED) { Log.i(TAG, "not granted " + perm); info = "denied perm " + perm; } else { Log.i(TAG, perm + " already granted"); info = dumpDeviceInfoImpl(context); } } 发送意图时,注释行始终返回SAME pid(B)。我可以确认AA有不同的PID。

更新

之前我认为这是由B引起的,所以我尝试BroadCastReceiver startActivity,然后在A开始活动。再次,在B期间,它再次失败。令人惊讶的是,仍然返回了相同的pid。

那么使用checkCallingPermission的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

使用这种方法

checkCallingPermission(Context context, String permission, String packageName)

检查您正在处理的IPC是否具有给定的权限,以及是否允许与此权限相对应的应用操作。

相关问题