BroadCastReceiver 기본 응용 프로그램 상세 정보

14341 단어 안드로이드
오늘은 안드로이드 4대 구성 요소 중 하나인 방송의 기초 용법에 대해 토론해 보겠습니다. 방송이 무엇인지 알아보려면 방송이 무엇일까요?
방송은 라디오로 방송 방송을 수신하고 발송하는 데 쓰이는 의미이다.시스템에서 일부 사건의 변화가 발생할 수 있다. 예를 들어 전량이 낮아지고 문자를 수신하고 전화를 걸며 화면 잠금 해제 시스템은 방송을 보낼 것이다. 응용 프로그램이 이 방송을 받으면 시스템에 무슨 사건이 발생했는지 알고 해당하는 코드를 집행하여 방송으로 받는 사람이 방송을 받을 수 있도록 한다.
방송의 분류와 차이 - 질서정연한 방송과 무질서한 방송
순차적 방송
수신자의 우선순위에 따라 하나씩 전달하고, 우선순위가 가장 높은 수신자는 이 방송을 중지하지 않으면 아래로 전달한다.
무질서한 방송
수신자가 얼마나 되든지 간에 일단 무질서한 방송을 보내면, 이 방송을 감청하는 모든 수신자는 수신할 수 있다
브로드캐스트 등록 방식-정적 등록
우선, 방송은 두 가지 등록 방식이 있는데 하나는 명세서 파일에 등록하고 등록 후 프로그램이 실행되자마자 감청하기 시작한다.코드에 등록하여 필요에 따라 등록하여 방송을 취소한다.우리는 먼저 방송의 첫 번째 등록 방식을 보고, 먼저 방송 수용자를 정의한다
public class TestReciver extends BroadcastReceiver {  

    @Override  
    public void onReceive(Context arg0, Intent arg1) {  
        // TODO Auto-generated method stub  

    }  

}  

그리고 명세서 파일에 등록하세요.
<receiver android:name="com.batways.apopo.receiver.TestReciver" >  
          <intent-filter>  
              <action android:name="aaa.bbb.ccc" />  

              <category android:name="android.intent.category.DEFAULT" />  
          intent-filter>  
      receiver>  

이렇게 하면 프로그램이 시작될 때 방송은'aaa.bbb.ccc'라는 동작을 감청하기 시작한다.
브로드캐스트 등록 방법-동적 등록
그다음에 코드에 등록된 방송을 볼게요. 먼저 코드에 new에 있는 라디오 수신자.
private class UpdateCreditsBroadCast extends BroadcastReceiver {  
    @Override  
    public void onReceive(Context context, Intent intent) {  

    }  

}  

그리고 코드로 등록: category 채울 수도 있고 안 채울 수도 있어요.
mUpdateCreditsBroadCast = new UpdateCreditsBroadCast();  
        IntentFilter filter = new IntentFilter("com.batways.apopo_core.service");  
        //filter.addCategory(Intent.ACTION_DEFAULT);  
        registerReceiver(mUpdateCreditsBroadCast, filter);  

일반적으로 등록 파일의 라이프 사이클 함수에서 시작 함수에 브로드캐스트를 등록하고 끝 함수에서 브로드캐스트를 로그오프합니다.
unregisterReceiver(mUpdateCreditsBroadCast);  
        mUpdateCreditsBroadCast = null; 

이렇게 하면 재코드에서 방송하는 등록과 취소가 완성된다.그럼 우리가 라디오를 보낼 때 어떻게 해야 하나요?여기 블로거가 방송 도구류를 제공하죠. 웬만하면 사용을 만족시킬 수 있어요.여기에 각별한 주의가 필요합니다. 만약에 방송 등록할 때 category를 넣었다면 여기에 추가해야 합니다. 없으면 여기에 추가할 필요가 없습니다.
public class BroadcastHelper {  


    /** 
     *   String         
     * @param context 
     * @param action 
     * @param key 
     * @param value 
     */  
    public static void sendBroadCast(Context context,String action,String key,String value) {  
        Intent intent = new Intent();  
        intent.setAction(action);  
        intent.addCategory(Intent.CATEGORY_DEFAULT);  
        intent.putExtra(key, value);  
        context.sendBroadcast(intent);  
    }  

    public static void sendBroadCast(Context context,String action,String key,int value) {  
        Intent intent = new Intent();  
        intent.setAction(action);  
        intent.addCategory(Intent.CATEGORY_DEFAULT);  
        intent.putExtra(key, value);  
        context.sendBroadcast(intent);  
    }  


}  

어댑터에서 브로드캐스트 인스턴스 보내기
브로드캐스트 인스턴스 보내기
활성 페이지 코드 첨부
package com.example.asus.weatherapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class ServiceActivity extends AppCompatActivity {

    private Button button1,button2;
    public static ImageView imageView;
    private Intent intent;
    private MyReceiver myReceiver;

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

        button1= (Button) findViewById(R.id.btn1_service);
        button2= (Button) findViewById(R.id.btn2_service);
        imageView= (ImageView) findViewById(R.id.img_service);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent=new Intent(ServiceActivity.this,MyService.class);
                startService(intent);
            }
        });

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent=new Intent(ServiceActivity.this,MyService.class);
                stopService(intent);
            }
        });
        initReceiver();
    }

    public void initReceiver(){
        myReceiver=new MyReceiver();
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("com.example.asus.img");
        registerReceiver(myReceiver,intentFilter);
    }

    class MyReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            byte[] tu=intent.getByteArrayExtra("tu");
            Bitmap bitmap= BitmapFactory.decodeByteArray(tu,0,tu.length);
            imageView.setImageBitmap(bitmap);
        }
    }
}

우리는 라디오를 더욱 잘 호출할 수 있도록 내부 클래스를 직접 정의합니다. 다음은 서비스 코드를 드리겠습니다
package com.example.asus.weatherapplication;

import android.app.Service;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.support.annotation.Nullable;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by asus on 2018/6/19.
 */

public class MyService extends Service {

    private String TAG = "MyService";
    private ByteArrayOutputStream os = new ByteArrayOutputStream();

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e(TAG, "onCreate...........");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.e(TAG, "onBind...........");
        return null;
    }


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e(TAG, "onStartCommand...........");
        new Thread(new Runnable() {
            @Override
            public void run() {
                getWebpic();
            }
        }).start();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "onDestroy...........");
    }

    public void getWebpic() {
        try {

            URL url = new URL("http://img4.duitang.com/uploads/item/201209/14/20120914194440_vJwWL.thumb.700_0.jpeg");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            InputStream inputDtream = connection.getInputStream();
            Bitmap bitmap = BitmapFactory.decodeStream(inputDtream);
            bitmap.compress(Bitmap.CompressFormat.PNG,100,os);
            byte[] tu=os.toByteArray();
            Intent intent=new Intent("com.example.asus.img");
            intent.putExtra("tu",tu);
            sendBroadcast(intent);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

이렇게 하면 비교적 간단하게 서비스에서 라디오를 보낼 수 있다
상용 시스템 방송 및 그 용법

좋은 웹페이지 즐겨찾기