AndroidStudio 브로드캐스트 상세 정보

3058 단어 AS
먼저 기록: 미완성!업데이트 대기!
//메모: 안드로이드 소스 코드 다운로드
방송 메커니즘, 먼저 말하자면 방송은 표준 방송과 질서 있는 방송으로 나뉜다.
표준 방송은 완전히 비동기적인 방송으로 방송이 나간 후 모든 방송 수신기는 거의 같은 시간에 동시에 방송을 수신하여 효율은 높지만 차단할 수 없다.
질서정연한 방송은 동기화된 조작이다.매 시간마다 하나의 방송 수신기만 이 방송을 받아들일 수 있고 모든 방송 수신기는 설정된 우선순위에 따라 수신할 수 있으며 높은 우선순위의 방송 수신기는 방송을 차단할 수 있다.
Android에는 여러 시스템 브로드캐스트가 내장되어 있습니다. 먼저 시스템 브로드캐스트에 대해 살펴보겠습니다.
시스템 방송은 등록 방식에 따라 동적 방송과 정적 방송으로 나눌 수 있다.동적 방송은 코드에 등록된 방송으로 앱이 실행될 때만 수신할 수 있는 방송이다.정적 방송은 앱이 실행되지 않을 때도 받을 수 있는 방송이다. 그러나 이것은 우리가 정적 방송을 이용하여 앱을 시작할 수 있다는 것을 의미하지 않는다. 왜냐하면 구글이android8에 있기 때문이다.0 이후에 방송에 대해 완전한 제한을 했다.대부분의 정적 방송을 없애버려서 현재 대부분의 방송은 동적 등록을 해야만 수신할 수 있다.
다음은 네트워크 변화를 예로 삼아 동적 방송(코드부터 올리기)을 소개한다.
여기서 다루는 코드의 첫 번째 부분은 Activity입니다.
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private IntentFilter intentFilter;
    private MyBroadCastReceiver myBroadCastReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //   IntentFilter          
        //       action          
        intentFilter=new IntentFilter();
        //android.net.conn.CONNECTIVITY_CHANGE,  action         ,        
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        //          
        myBroadCastReceiver=new MyBroadCastReceiver();
        //       
        registerReceiver(myBroadCastReceiver,intentFilter);
    }
    //           BroadcastReceiver,                         。
    //onReceive()          
    class MyBroadCastReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i(TAG, "onReceive:       ");
            try{
                //ConnectivityManager                  ,     getSystemService    ConnectivityManager   
                ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
                //ConnectivityManager    getActiveNetworkInfo()      NetWorkInfo   
                //              
                NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
                if (networkInfo!=null&&networkInfo.isAvailable()){
                    Log.i(TAG, "onReceive:       ");
                }else {
                    Log.i(TAG, "onReceive:      ");
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //          
        //       ,         
        unregisterReceiver(myBroadCastReceiver);
    }
}

두 번째 부분의 코드는 안드로이드 매니페스트입니다.xml 파일(목록)에서 신청 권한:

이것은 실현된 효과도이다.
 
다음은 정적 방송입니다. 정적 방송은 현재 환경에서 전시하기 어려우니 코드를 말씀드리겠습니다.

좋은 웹페이지 즐겨찾기