Android 향상 BroadcastReceiver 인 스 턴 스 상세 설명
7822 단어 AndroidBroadcastReceiver
본 고 에서 보 여 준 인 스 턴 스 코드 는 주로 어떻게 정적/동적 으로 BroastcastReceiver 를 등록 하고 시스템 에 전기 정 보 를 요구 하 는 지,그리고 매 거 진 정보의 필드 등 기능 과 기능 을 보 여 주 었 다.
프로그램 실행 캡 처 는 다음 과 같 습 니 다.
위의 그림 은 Intent 를 내부 동적 으로 등 록 된 BroadcastReceiver 로 보 내 고 받 은 후에 메시지 이름 을 표시 합 니 다.동적 등록 BroadcastReceiver 는 registerReceiver()를 사용 합 니 다.
위의 그림 은 Intent 를 내부 정적 으로 등 록 된 BroadcastReceiver 로 보 내 고 받 은 후에 메시지 이름 을 표시 합 니 다.정적 등록 은 동적 등록 보다 번 거 로 운 점 입 니 다.먼저 BroadcastReceiver 를 계승 하 는 클래스 를 새로 만 든 다음 AndroidManifest.xml 에 추가 합 니 다.
<receiver android:name="clsReceiver2">
<intent-filter>
<action
android:name="com.testBroadcastReceiver.Internal_2"/>
</intent-filter>
</receiver>
첫 번 째 name 은 클래스 이름 이 고,두 번 째 는 action 의 이름 입 니 다.위의 그림 은 Intent 메 시 지 를 매 거 하 는 필드 입 니 다.이 기능 은 게 으 른 사람 에 게 적합 합 니 다.받 은 Intent 메시지 의 필드 를 모두 분해 하고 어떤 것 이 필요 한 지 기억 하기 귀 찮 습 니 다.이 부분 을 실현 하 는 코드 는 다음 과 같다.
// Intent ,
Bundle b=intent.getExtras();
Object[] lstName=b.keySet().toArray();
for(int i=0;i<lstName.length;i++)
{
String keyName=lstName[i].toString();
Log.e(keyName,String.valueOf(b.get(keyName)));
}
main.xml 코드 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/Button01" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text=" BroadcastReceiver"></Button>
<Button android:id="@+id/Button02" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text=" BroadcastReceiver"></Button>
<Button android:id="@+id/Button03" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text=" BroadcastReceiver"></Button>
</LinearLayout>
testBroadcastReceiver.java 의 코드 는 다음 과 같 습 니 다.
package com.testBroadcastReceiver;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class testBroadcastReceiver extends Activity {
Button btnInternal1,btnInternal2,btnSystem;
static final String INTENAL_ACTION_1 = "com.testBroadcastReceiver.Internal_1";
static final String INTENAL_ACTION_2 = "com.testBroadcastReceiver.Internal_2";
static final String INTENAL_ACTION_3 = "com.testBroadcastReceiver.Internal_3";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnInternal1=(Button)this.findViewById(R.id.Button01);
btnInternal1.setOnClickListener(new ClickEvent());
btnInternal2=(Button)this.findViewById(R.id.Button02);
btnInternal2.setOnClickListener(new ClickEvent());
btnSystem=(Button)this.findViewById(R.id.Button03);
btnSystem.setOnClickListener(new ClickEvent());
//
registerReceiver(bcrIntenal1, new IntentFilter(INTENAL_ACTION_1));
}
class ClickEvent implements View.OnClickListener{
@Override
public void onClick(View v) {
if(v==btnInternal1)// BroadcastReceiver
{
Intent intent = new Intent(INTENAL_ACTION_1);
sendBroadcast(intent);
}
else if(v==btnInternal2)// BroadcastReceiver
{
Intent intent = new Intent(INTENAL_ACTION_2);
sendBroadcast(intent);
}
else if(v==btnSystem)// 2 BroadcastReceiver
{
IntentFilter filter = new IntentFilter();//
filter.addAction(Intent.ACTION_BATTERY_CHANGED);//
filter.addAction(INTENAL_ACTION_3);//
registerReceiver(batInfoReceiver, filter);
Intent intent = new Intent(INTENAL_ACTION_3);
intent.putExtra("Name", "hellogv");
intent.putExtra("Blog", "http://blog.csdn.net/hellogv");
sendBroadcast(intent);//
}
}
}
/*
* BroadcastReceiver
*/
private BroadcastReceiver bcrIntenal1 = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(context, " :"+action, 1000).show();
}
};
private BroadcastReceiver batInfoReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// action ACTION_BATTERY_CHANGED
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
// Intent ,
Bundle b=intent.getExtras();
Object[] lstName=b.keySet().toArray();
for(int i=0;i<lstName.length;i++)
{
String keyName=lstName[i].toString();
Log.e(keyName,String.valueOf(b.get(keyName)));
}
}
// action INTENAL_ACTION_3
if (INTENAL_ACTION_3.equals(action)) {
// Intent ,
Bundle b=intent.getExtras();
Object[] lstName=b.keySet().toArray();
for(int i=0;i<lstName.length;i++)
{
String keyName=lstName[i].toString();
Log.e(keyName,b.getString(keyName));
}
}
}
};
}
clsReceiver 2.java 의 코드 는 다음 과 같 습 니 다:
package com.testBroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
/*
* BroadcastReceiver,
* step1: AndroidManifest.xml
* <receiver android:name="clsReceiver2">
<intent-filter>
<action
android:name="com.testBroadcastReceiver.Internal_2"/>
</intent-filter>
</receiver>
step2:
step3: Intent BroadcastReceiver
*/
public class clsReceiver2 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(context, " :"+action, 1000).show();
}
}
관심 있 는 친 구 는 이 인 스 턴 스 를 디 버 깅 하여 실행 할 수 있 습 니 다.여러분 의 안 드 로 이 드 프로젝트 개발 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.