2017-03-20 8 views
0

私は他のアクティビティから明示的なインテントを受け取り、以下のようにエクストラとして暗黙のインテントを返すインテントサービスを提供しています。Android:アプリケーション内の複数の受信者に安全に1つのインテントを送信する方法

Intent someImplicitIntent= new Intent(APP_PACKAGE_NAME + ACTION_SOME_DATA); 
    someImplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "HELLO"); 
    sendBroadcast(someImplicitIntent); 

ソフトウェアデザイン面では、私が実行している場合、異なるものを行うため、同一のデータを使用することを、アプリ内で複数のアクティビティを持っています。だから、現在私は、 "APP_PACKAGE_NAME + EXTRA_SOME_DATA"を聞いて、それに応じて何かを中断するように、各アクティビティで放送受信機をセットアップしました。ブロードキャストレシーバは、それぞれのアクティビティのライフサイクルに結び付けられています。

この設定は、機能のテストに適しています。しかし、問題は、私はAndroidの暗黙のインテントがインテントシステム全体をブロードキャストすることを理解しているので、登録されたブロードキャスト受信者がそのアクションを聴いているすべてのアプリがインテントとその余分なものを受け取ることになります。暗黙のインテントは意図された目的には最適ですが、私にとっては、最小限のコードと1人または複数の受信者を送信する利便性は明らかなセキュリティリスクを伴います。

私は明示的なインテントを作ることを考えていたが、私の現在の&限られた理解が、私は以下のように、アプリケーションの範囲内でデータのプライベートを維持するために、各活動のための明確な意図を作成する必要があります:

Intent someExplicitIntent= new Intent(this, activityOne.class); 
    someExplicitIntent.setAction(APP_PACKAGE_NAME + ACTION_SOME_DATA) 
    someExplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "Hi"); 
    sendBroadcast(someExplicitIntent); 

    Intent someExplicitIntent2= new Intent(this, activityTwo.class); 
    someExplicitIntent2.setAction(APP_PACKAGE_NAME + ACTION_SOME_DATA) 
    someExplicitIntent2.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "Hi"); 
    sendBroadcast(someExplicitIntent2); ..... so on, for the same data to N activities 

上記のスニペットは不必要に見え、リソースが拾われないという意図を送信する無駄になります。アプリケーション内の複数の受信者に余計に1つのインテントを安全に送信する方法についていくつかの助けが必要です。本当にありがとう。

+1

[ 'LocalBroadcastManager'](https://developer.android.com/reference/android/support/v4/:

LocalBroadcastManagerの詳細については

、あなたは次のリンクをチェックアウトすることができますcontent/LocalBroadcastManager.html)。 –

+0

うわー、とてもシンプル:)ちょっと確認してみてください。LocalBroadcastManager.getInstance(this).sendBroadcast(...)とLocalBroadcastManager.getInstance(this).registerReceiver(...)を使用して受信者を正しく登録してください?ビンゴ。 –

+1

。ええ、 'LocalBroadcastManager'で送信と登録の両方を行うようにしてください。なぜなら、それは' Context'上のどのブロードキャストやレシーバーでも動作しないからです。これは、通常、最初のユーザーが行う間違いですが、あなたが持っているかのように聞こえます。乾杯! –

答えて

1

LocalBroadcastManagerを使用してブロードキャストを送信することができます。ブロードキャストは、アプリケーションのコンポーネントによってのみ受信されるため、セキュリティが確保されます。

Intent someImplicitIntent= new Intent(APP_PACKAGE_NAME + ACTION_SOME_DATA); 
    someImplicitIntent.putExtra(APP_PACKAGE_NAME + EXTRA_SOME_DATA, "HELLO"); 
    LocalBroadcastManager.getInstance(this).sendBroadcast(someImplicitIntent); 

をその後、ちょうどあなたが意図余分/ sに先のこれらのコンポーネントには、あなたの放送受信機を登録し、次のよう

だから、あなたが行うことができます。

このようにして、ローカルブロードキャストを介して余分な/ sを送ることができます。

https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

関連する問題