BroadCastReceiver 기본 응용 프로그램 상세 정보
14341 단어 안드로이드
방송은 라디오로 방송 방송을 수신하고 발송하는 데 쓰이는 의미이다.시스템에서 일부 사건의 변화가 발생할 수 있다. 예를 들어 전량이 낮아지고 문자를 수신하고 전화를 걸며 화면 잠금 해제 시스템은 방송을 보낼 것이다. 응용 프로그램이 이 방송을 받으면 시스템에 무슨 사건이 발생했는지 알고 해당하는 코드를 집행하여 방송으로 받는 사람이 방송을 받을 수 있도록 한다.
방송의 분류와 차이 - 질서정연한 방송과 무질서한 방송
순차적 방송
수신자의 우선순위에 따라 하나씩 전달하고, 우선순위가 가장 높은 수신자는 이 방송을 중지하지 않으면 아래로 전달한다.
무질서한 방송
수신자가 얼마나 되든지 간에 일단 무질서한 방송을 보내면, 이 방송을 감청하는 모든 수신자는 수신할 수 있다
브로드캐스트 등록 방식-정적 등록
우선, 방송은 두 가지 등록 방식이 있는데 하나는 명세서 파일에 등록하고 등록 후 프로그램이 실행되자마자 감청하기 시작한다.코드에 등록하여 필요에 따라 등록하여 방송을 취소한다.우리는 먼저 방송의 첫 번째 등록 방식을 보고, 먼저 방송 수용자를 정의한다
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();
}
}
}
이렇게 하면 비교적 간단하게 서비스에서 라디오를 보낼 수 있다
상용 시스템 방송 및 그 용법
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VisualStudio에서 Ant를 사용하여 Native APK를 만듭니다.※2019/11/13 Gradle판의 기사도 올랐습니다. 자세한 내용은 을 참조하십시오. CEDEC2019의 " "이라는 세션에서 VisualStudio에서도 Gradle을 사용한 Native 앱을 만들 수 있다는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.