私は、ネイティブのAndroidコードベースを理解しようとしています。アクセス許可がチェックされるコードの部分を知りたいと思います。たとえば、SMSを送信する場合は、次の関数が必要です。public void sendDataMessage(String destinationAddress、String scAddress、short destinationPort、byte [] data、PendingIntent sentIntent、PendingIntent deliveryIntent)これと一緒に私はパーミッションを宣言する必要がありますAndroidマニフェストの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
}
}
ここでは正確にアクセス許可がチェックされています。私はSMSの送信前に、AndroidがSEND_SMS権限をチェックする部分のコードを探しています。私は、PackageManagerのさまざまな権限チェック機能への呼び出しを期待していましたが、そうではありません。私はいくつかの同様の質問hereを発見したところで、パッケージがLinuxユーザにどのようにリンクされているかを話します。しかし、私はそれが正確にチェックされているコードを通過したいと思います。
感謝多くのVishal。素晴らしい説明。 :) –