gpt4 book ai didi

java - Android 权限检查类

转载 作者:行者123 更新时间:2023-11-30 01:24:01 24 4
gpt4 key购买 nike

我正在尝试了解 native Android 代码库。我想知道检查权限的代码部分。例如,如果我想发送短信,我需要函数:public void sendDataMessage (String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) 与此一起我需要在 Android Manifest 中声明权限SEND_SMS。如果我不声明权限,我会得到一个安全异常。但是我没有在SmsManager.java 的代码中找到这部分。这是函数:

public void sendDataMessage(
String destinationAddress, String scAddress, short destinationPort,
byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
if (TextUtils.isEmpty(destinationAddress)) {
throw new IllegalArgumentException("Invalid destinationAddress");
}

if (data == null || data.length == 0) {
throw new IllegalArgumentException("Invalid message data");
}

try {
ISms iccISms = getISmsServiceOrThrow();
iccISms.sendDataForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(),
destinationAddress, scAddress, destinationPort & 0xFFFF,
data, sentIntent, deliveryIntent);
} catch (RemoteException ex) {
// ignore it
}
}

那么到底在哪里检查权限。我正在寻找在发送短信之前,Android 检查 SEND_SMS 权限的代码部分。我期待调用 PackageManager 中的各种权限检查功能,但事实并非如此。我发现了几个类似的问题here他们在那里谈论软件包如何链接到 linux 用户。但我想通过精确检查的代码。

最佳答案

sendTextMessage() 方法实例化一个 ISms 对象。然后调用接口(interface)中定义的 sendText() 方法。

 ISms iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));
if (iccISms != null) {
iccISms.sendText(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
}

这里ISms是一个接口(interface)。所以 getService() 方法返回的对象必须实现这个接口(interface)。幸运的是,只有两个类扩展了这个接口(interface)。第一个是 IccSmsInterfaceManager,另一个是 IccSmsInterfaceManagerProxy(我忽略了这个)。

IccSmsInterfaceManager 类可以在“/frameworks/base/telephony/java/com/android/internal/telephony/IccSmsInterfaceManager.java”中找到。此类的 sendText() 方法执行我们感兴趣的权限检查。

 mPhone.getContext().enforceCallingPermission(
"android.permission.SEND_SMS",
"Sending SMS message");

这个 enforceCallingPermission 调用最终通过以下类进入 PackageManager,

上下文-> ActivityManager -> PackageManagerService

来源:Chasing Android System Calls Down The Rabbit Hole , 最后访问:2016 年 7 月 20 日

关于java - Android 权限检查类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36690133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com