android放送

9317 ワード

Android:Broadcast放送タイプは主に5種類に分けられます.
一般放送(Normal Broadcast)システム放送(System Broadcast)秩序放送(Ordered Broadcast)スティッキー放送(Sticky Broadcast)アプリケーション内放送(Local Broadcast)の具体的な説明は以下の通りである.
1.一般放送(Normal Broadcast)は、開発者自身がintentを定義する放送(最も一般的なもの)である.

1
Intent intent = new Intent(); 2 // BroadcastReceiver intentFilter action 3 intent.setAction(BROADCAST_ACTION); 4 // 5 sendBroadcast(intent);


  mBroadcastReceiver        
//        mBroadcastReceiver//                

  
    
  


登録されたブロードキャスト受信者に登録されている場合intentFilterのactionが上記と一致すると、このブロードキャストが受信される(すなわち、コールバックonReceive()が行われる).
送信ブロードキャストに対応する権限がある場合、ブロードキャスト受信者にも対応する権限が必要である.システムブロードキャスト(System Broadcast)Androidには複数のシステムブロードキャストが内蔵されている.携帯電話の基本操作(起動、ネットワーク状態の変化、写真撮影など)に関わる限り、対応するブロードキャストが発行される.各ブロードキャストには特定のIntent-Filter(具体的なactionを含む)があり、Androidシステムブロードキャストactionは以下の通りである.
 1                             action
 2                            android.net.conn.CONNECTIVITY_CHANGE
 3                          Intent.ACTION_AIRPLANE_MODE_CHANGED
 4                         Intent.ACTION_BATTERY_CHANGED
 5                            Intent.ACTION_BATTERY_LOW
 6       (                 Intent.ACTION_BATTERY_OKAY
 7        (     )                  Intent.ACTION_BOOT_COMPLETED
 8           (    )              Intent.ACTION_CAMERA_BUTTON
 9                                      Intent.ACTION_CLOSE_SYSTEM_DIALOGS
10           (    、     )    Intent.ACTION_CONFIGURATION_CHANGED
11                                     Intent.ACTION_HEADSET_PLUG
12      SD       (      :  –SD      –  SD ) Intent.ACTION_MEDIA_BAD_REMOVAL
13         ( SD )                 Intent.ACTION_MEDIA_CHECKING
14     APK       Intent.ACTION_PACKAGE_ADDED
15     APK       Intent.ACTION_PACKAGE_REMOVED
16               Intent.ACTION_REBOOT
17              Intent.ACTION_SCREEN_OFF
18              Intent.ACTION_SCREEN_ON
19              Intent.ACTION_SHUTDOWN
20               Intent.ACTION_REBOOT

注意:システムブロードキャストを使用する場合は、ブロードキャスト受信者の登録時に関連するactionを定義するだけで、手動でブロードキャストを送信する必要はありません.システムに関連する操作がある場合は、自動的にシステムブロードキャストが行われます.
3.秩序放送(Ordered Broadcast)定義:送信された放送が放送受信者によって順番に受信される
順序付けは、ブロードキャスト受信者にとって、ブロードキャスト受信者がブロードキャストを受信する順序規則(静的および動的に登録されたブロードキャスト受信者向け)である.
1   Priority     -2 Priority     ,    

特長
受信ブロードキャストは、先に受信したブロードキャスト受信者を順番に受信してブロードキャストを遮断することができ、すなわち、後に受信したブロードキャスト受信者はこのブロードキャストを受信しなくなる.先に受信した放送受信者は放送を修正することができ、その後受信した放送受信者は修正された放送の具体的な使用を受信する.秩序放送の使用過程は普通の放送と非常に類似しており、違いは放送の送信方式にある.
      sendOrderedBroadcast(intent);4.Appアプリケーション内ブロードキャスト(Local Broadcast)背景:AndroidのブロードキャストはApp間で直接通信可能(exportedはintent-filterがある場合のデフォルト値はtrue)
衝突:発生する可能性のある問題:
他のAppは、現在のApp intent-filterに一致するブロードキャストをターゲットとして発行し、これにより、現在のAppはブロードキャストを受信し、処理し続ける.他のAppは、現在のAppと一致するintent-filterを登録して、ブロードキャストを受信し、ブロードキャストの具体的な情報を取得する.すなわち、セキュリティ&効率性の問題が発生します.ソリューション:Appアプリケーション内ブロードキャスト(Local Broadcast)を使用します.
Appアプリケーション内ブロードキャストは、ブロードキャストの送信者と受信者が同じAppに属するローカルブロードキャストとして理解される.
グローバルブロードキャスト(一般ブロードキャスト)に比べて、Appアプリケーション内のブロードキャストの利点は、セキュリティが高く、効率が高いことです.
具体的な使用1-グローバルブロードキャストをローカルブロードキャスト登録ブロードキャストに設定する場合、exportedプロパティをfalseに設定し、本App内部で発行されていないブロードキャストが受信されないようにする.ブロードキャストの送信と受信時に、対応する権限permissionを増設し、権限検証に使用する.ブロードキャストの送信時にブロードキャスト受信機が存在するパケット名を指定します.ブロードキャストは、このパケットのApp内で一致する有効なブロードキャスト受信機にのみ送信されます.intent.setPackage(packageName)指定応募
具体的な使用2-カプセル化されたLocalBroadcastManagerクラスを使用する使用方法は、グローバルブロードキャストとほぼ同じですが、ブロードキャスト受信機の登録/登録解除とブロードキャストの送信時にパラメータのcontextをLocalBroadcastManagerの単一のインスタンスに変更します.
注意:LocalBroadcastManager方式で送信されるアプリケーション内ブロードキャストについては、LocalBroadcastManagerでのみ動的に登録でき、静的に登録できません
  
 1 //          
 2 //  1:   BroadcastReceiver   & IntentFilter mBroadcastReceiver 
 3 mBroadcastReceiver = new mBroadcastReceiver(); 
 4 IntentFilter intentFilter = new IntentFilter();
 5 
 6 //  2:   LocalBroadcastManager   
 7 localBroadcastManager = LocalBroadcastManager.getInstance(this);
 8 
 9 //  3:          
10 intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);
11 
12 //  4:  LocalBroadcastManager     registerReceiver()         
13 localBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);
14 
15 //            
16 localBroadcastManager.unregisterReceiver(mBroadcastReceiver);
17 
18 //       
19 Intent intent = new Intent();
20 intent.setAction(BROADCAST_ACTION);
21 localBroadcastManager.sendBroadcast(intent);

5.スティッキー放送(Sticky Broadcast)
Android 5で0&API 21では失効しているので、使用はお勧めしませんが、ここでもあまりまとめません.
6.特に、異なる登録方式のブロードキャスト受信機コールバックOnReceive(Context context,Intent intent)におけるcontext戻り値が異なることに注意する.
静的登録(グローバル+アプリケーション内ブロードキャスト)の場合、コールバックonReceive(context,intent)のcontextは、ReceiverRestrictedContext;グローバルブロードキャストの動的登録の場合、コールバックonReceive(context,intent)のcontext戻り値は、Activity Context;アプリケーション内ブロードキャストの動的登録(LocalBroadcastManager方式)について、コールバックonReceive(context,intent)のcontext戻り値は、Application Contextである.アプリケーション内ブロードキャストの動的登録(LocalBroadcastManager以外)について、コールバックonReceive(context,intent)のcontext戻り値は、Activity Context;