Android 동적 브로드캐스트 및 정적 브로드캐스트

5086 단어 Android지식 기록
배우고 때로 익히며, 굳건한 마음이다
현재 동적 방송을 추천하고 있는데, 지금은 정적 방송을 사용한 적이 거의 없다.
동적 방송과 정적 방송의 연계
1 동적 방송의 속도는 정적 방송보다 빠르다
2 정적 방송의 생존 기간은 동적 방송보다 훨씬 길다
에서안에 등록된 시스템 브로드캐스트 수신기는 시스템에 캐시되며, 앱이 꺼진 후에도 해당 브로드캐스트가 전송되면 애플리케이션이 깨어난다
이것도 8.0 이후 구글이 일부 정적 방송을 보여줌으로써 동적 방송을 추천한다
3 동적 브로드캐스트는 코드에 등록되고 정적 브로드캐스트는 Manifest 파일에 구성
 
다음은 두 가지 사례를 비교하여 동적 방송과 정적 방송을 더욱 잘 이해하고자 한다.
1 동적 브로드캐스트
activity 안의 코드는 다음과 같다
public class DynamicBroadcast extends AppCompatActivity {
    DyReceive dyReceive;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dynamic_broadcast_layout);

        //   IntentFilter  
        IntentFilter filter = new IntentFilter();
        filter.addAction("huxiaomu");
        dyReceive = new DyReceive();
        //      
        registerReceiver(dyReceive, filter);

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction("huxiaomu");
                intent.putExtra("type", "   :       ");
                sendBroadcast(intent);

            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(dyReceive);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(dyReceive);
    }
}

직접 만든 DyReceive 코드는 다음과 같습니다.
public class DyReceive extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, intent.getStringExtra("type"), Toast.LENGTH_SHORT).show();
    }
}

2 정적 브로드캐스트
activity 코드는 다음과 같습니다
public class BroadStaticActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.broad_static_activity_layout);

        findViewById(R.id.st_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction("hly");
                intent.setPackage(getPackageName());
                intent.putExtra("type", "   :       ");
                sendBroadcast(intent);
            }
        });

    }
}
Manifest
  
            
               
                
            

        

주의: 여기enable는 이 방송 수신기를 가동하는지 여부를 가리킨다.exported: 이 프로그램 이외의 방송을 수신할 수 있는지 여부
StReceive 코드는 다음과 같습니다.
public class StReceive extends BroadcastReceiver {

 
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, intent.getStringExtra("type"), Toast.LENGTH_SHORT).show();

    }
}

 
눈에 띄는 차이점은 코드에 등록된 것과 프로필에 등록된 것이다
 
다음은 동적 방송 감청 네트워크 변화 코드가 다음과 같다.
public class MainActivity extends AppCompatActivity {
    private static final String tag = "-------------hxm";

    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                ConnectivityManager  connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo info = connectivityManager.getActiveNetworkInfo();
                if (info != null && info.isAvailable()) {
                    String name = info.getTypeName();
                    Log.e(tag, "      :" + name);
                    //doSomething()
                } else {
                    Toast.makeText(context, "       ", Toast.LENGTH_SHORT).show();
                    Log.e(tag, "      ");
                    //doSomething()
                }
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        IntentFilter mFilter = new IntentFilter();
        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(receiver, mFilter);


    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiver);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }
}

 
데모 주소 참고로 라디오를 더 잘 이해해주셨으면 좋겠습니다.

좋은 웹페이지 즐겨찾기