0

Android アプリ A にはインターネット アクセスがあります。

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

アプリ B にはインターネット アクセスがありません。だから私はアプリAからアプリBへのインターネットアクセスをPendingIntent. これがそのPendingIntentためですよね。

By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself (with the same permissions and identity).

これは私PendingIntentがアプリAで送信する方法です:

Intent mainApp = new Intent(Intent.ACTION_MAIN);
mainApp.addCategory(Intent.CATEGORY_LAUNCHER);
mainApp.setClassName("com.other.package", "com.other.package.MainActivity");
int flags = PendingIntent.FLAG_UPDATE_CURRENT | Intent.FLAG_ACTIVITY_NEW_TASK;
PendingIntent pi = PendingIntent.getActivity(this, 23894729834, mainApp, flags);
try {
    pi.send();
}
catch (CanceledException e) { }

これは、アプリ B (launchMode=singleTask を持つ) でそれを受信しようとする方法です。

@Override
protected void onNewIntent(Intent i) {
    setIntent(i);
    // do some things with Internet access here
}

しかし、うまくいきません!なぜなのかご存知ですか?私は何を間違えましたか?

前もって感謝します!

4

2 に答える 2

2

そこで、PendingIntent を介してアプリ A からアプリ B にインターネット アクセスを許可したいと考えています。

それはできません、申し訳ありません。

これが PendingIntent の目的ですよね。

いいえ。

引用したドキュメントの部分を詳しく見てみましょう。

別のアプリケーションに PendingIntent を与えることで、別のアプリケーションが自分自身であるかのように (同じアクセス許可と ID で)、指定した操作を実行する権利をそのアプリケーションに付与します。

(太字は強調のため)

アプリ B はPendingIntentviaを実行でき、アプリ B に (たとえば、追加として)を送信するsend()と、アプリ A がそれを実行したかのように実行されます。でも:PendingIntent Intent

  • をアプリ B に送信するのではなく、アプリ A にPendingIntentvia を実行させ、アプリ B を起動させます。send()PendingIntent

  • PendingIntentアプリ B は、アプリ A によって作成されたものを介してたまたま呼び出されたという理由だけで、魔法のようにアプリ A のアクセス許可を取得しません。

どうしても「アプリ A からアプリ B にインターネット アクセスを許可する」方法はありません。アプリ B は、アプリ A に代わりにリクエストを実行するように依頼できます (たとえば、アプリ A によって公開されたサービスに送信されるコマンドを介して)。ただし、これを行うときは細心の注意を払う必要があります。デフォルトでは、アプリ A に何かを依頼できるだけでなく、デバイス上の他のアプリにも依頼できるからですアプリ A のエクスポートされたサービスを保護します。

于 2012-08-16T00:27:38.557 に答える
1

保留中のインテントは、何かを行うためのアクセス許可を付与しません。それが行うのは、保留中のインテントの作成者自身がそれを行ったかのように、このインテントの起動を行うことだけです。

たとえば、保護されたブロードキャストを起動する権限を持つアプリがあるとします。アプリはpendingBroadcastを作成し、この権限を持たない他のアプリにオブジェクトを渡すことができますが、他のアプリはこのpendingIntentを使用してブロードキャストできます。

于 2012-08-15T23:55:16.630 に答える