Android-방송 수신기
Broadcast Receivers 다른 애플리케이션이나 시스템 자체의 브로드 캐스트 메시지에 간단히 응답 할 수 있습니다. 이러한 메시지를 이벤트 또는 인 텐트라고도합니다. 예를 들어, 애플리케이션은 브로드 캐스트를 시작하여 일부 데이터가 디바이스에 다운로드되어 사용할 수 있음을 다른 애플리케이션에 알릴 수 있으므로이 통신을 가로 채고 적절한 조치를 시작할 브로드 캐스트 수신기가됩니다.
시스템 브로드 캐스트 인 텐트에 대해 BroadcastReceiver가 작동하도록하려면 다음 두 가지 중요한 단계가 있습니다.
방송 수신기 만들기.
방송 수신기 등록
커스텀 인 텐트를 구현하려는 경우 추가 단계가 하나 더 있습니다. 그런 다음 해당 인 텐트를 만들고 브로드 캐스트해야합니다.
방송 수신기 만들기
브로드 캐스트 수신기는 다음의 하위 클래스로 구현됩니다. BroadcastReceiver 클래스와 각 메시지가 수신되는 onReceive () 메서드를 재정의합니다. Intent 개체 매개 변수.
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
방송 수신기 등록
애플리케이션은 AndroidManifest.xml 파일에 broadcast receiver를 등록하여 특정 브로드 캐스트 인 텐트를 수신 합니다. Android 시스템이 부팅 프로세스를 완료하면 시스템에서 발생하는 시스템 생성 이벤트 ACTION_BOOT_COMPLETED에 대해 MyReceiver 를 등록 한다고 가정 해 보겠습니다 .
방송 수신기
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">
</action>
</intent-filter>
</receiver>
</application>
이제 Android 기기가 부팅 될 때마다 BroadcastReceiver MyReceiver에 의해 차단되고 onReceive () 내부에 구현 된 로직 이 실행됩니다.
최종 정적 필드로 정의 된 여러 시스템 생성 이벤트가 있습니다. Intent수업. 다음 표에는 몇 가지 중요한 시스템 이벤트가 나열되어 있습니다.
Sr. 아니요 | 이벤트 상수 및 설명 |
---|---|
1 | android.intent.action.BATTERY_CHANGED 충전 상태, 수준 및 배터리에 대한 기타 정보가 포함 된 고정 브로드 캐스트입니다. |
2 | android.intent.action.BATTERY_LOW 장치의 배터리 부족 상태를 나타냅니다. |
삼 | android.intent.action.BATTERY_OKAY 배터리가 부족한 후 이제 정상임을 나타냅니다. |
4 | android.intent.action.BOOT_COMPLETED 시스템 부팅이 완료된 후 한 번 브로드 캐스트됩니다. |
5 | android.intent.action.BUG_REPORT 버그보고 활동을 표시합니다. |
6 | android.intent.action.CALL 데이터에 지정된 사람에게 호출을 수행합니다. |
7 | android.intent.action.CALL_BUTTON 사용자가 "통화"버튼을 눌러 전화를 걸기위한 다이얼러 또는 기타 적절한 UI로 이동했습니다. |
8 | android.intent.action.DATE_CHANGED 날짜가 변경되었습니다. |
9 | android.intent.action.REBOOT 장치를 재부팅하십시오. |
커스텀 인 텐트 브로드 캐스팅
애플리케이션 자체에서 사용자 지정 인 텐트를 생성하고 보내 려면 활동 클래스 내 에서 sendBroadcast () 메서드 를 사용하여 해당 인 텐트를 만들고 전송 해야합니다. sendStickyBroadcast (Intent) 메서드 를 사용하는 경우 Intent는sticky, 전송 하는 인 텐트 는 브로드 캐스트가 완료된 후에도 유지됩니다.
public void broadcastIntent(View view) {
Intent intent = new Intent();
intent.setAction("com.tutorialspoint.CUSTOM_INTENT");
sendBroadcast(intent);
}
이 인 텐트 com.tutorialspoint.CUSTOM_INTENT 는 시스템 생성 인 텐트를 등록한 것과 유사한 방식으로 등록 할 수도 있습니다.
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.tutorialspoint.CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
예
이 예제는 커스텀 인 텐트를 가로 채기 위해 BroadcastReceiver 를 생성하는 방법을 설명합니다 . 커스텀 인 텐트에 익숙해지면 시스템 생성 인 텐트를 가로 채도록 애플리케이션을 프로그래밍 할 수 있습니다. 이제 Hello World 예제 챕터 에서 만든 Android 애플리케이션을 수정하려면 다음 단계를 따르십시오.
단계 | 기술 |
---|---|
1 | Android 스튜디오를 사용하여 Android 애플리케이션을 만들고 Hello World 예제 장에 설명 된대로 com.example.tutorialspoint7.myapplication 패키지에서 My Application 으로 이름을 지정합니다 . |
2 | 기본 활동 파일 MainActivity.java 를 수정 하여 broadcastIntent () 메서드 를 추가 합니다. |
삼 | com.example.tutorialspoint7.myapplication 패키지 아래에 MyReceiver.java 라는 새 Java 파일 을 만들어 BroadcastReceiver를 정의합니다. |
4 | 애플리케이션은 제한없이 하나 이상의 사용자 지정 및 시스템 의도를 처리 할 수 있습니다. 가로 채려는 모든 인 텐트는 <receiver ... /> 태그를 사용 하여 AndroidManifest.xml 파일에 등록되어야합니다. |
5 | res / layout / activity_main.xml 파일 의 기본 콘텐츠를 수정하여 인 텐트를 브로드 캐스트하는 버튼을 포함합니다. |
6 | 문자열 파일을 수정할 필요가 없으며 Android 스튜디오는 string.xml 파일을 처리합니다. |
7 | 애플리케이션을 실행하여 Android 에뮬레이터를 시작하고 애플리케이션에서 수행 한 변경 결과를 확인합니다. |
다음은 수정 된 주요 활동 파일의 내용입니다. MainActivity.java. 이 파일에는 각 기본 라이프 사이클 방법이 포함될 수 있습니다. 커스텀 인 텐트를 브로드 캐스트하기 위해 broadcastIntent () 메서드를 추가했습니다 .
package com.example.tutorialspoint7.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// broadcast a custom intent.
public void broadcastIntent(View view){
Intent intent = new Intent();
intent.setAction("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast(intent);
}
}
다음 내용은 MyReceiver.java:
package com.example.tutorialspoint7.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
/**
* Created by TutorialsPoint7 on 8/23/2016.
*/
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
다음은 AndroidManifest.xml 파일 의 수정 된 내용입니다 . 여기에 서비스를 포함하기 위해 <receiver ... /> 태그를 추가했습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tutorialspoint7.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.tutorialspoint.CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
</manifest>
다음 내용은 res/layout/activity_main.xml 사용자 정의 의도를 브로드 캐스트하는 버튼을 포함하는 파일-
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Example of Broadcast"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point "
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="Broadcast Intent"
android:onClick="broadcastIntent"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
</RelativeLayout>
수정 된 내용을 실행 해 보겠습니다. Hello World!방금 수정 한 응용 프로그램입니다. 나는 당신이 당신의AVD환경 설정을하는 동안. Android 스튜디오에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고
이제 커스텀 인 텐트를 브로드 캐스트하기 위해 Broadcast Intent버튼을 누르면 사용자 정의 의도 "com.tutorialspoint.CUSTOM_INTENT" 를 브로드 캐스트합니다. 이는 등록 된 BroadcastReceiver, 즉 MyReceiver에 의해 차단되며 구현 된 로직에 따라 다음과 같이 시뮬레이터 하단에 토스트가 나타납니다.
다른 BroadcastReceiver를 구현하여 시스템 부팅, 날짜 변경, 배터리 부족 등과 같은 시스템 생성 의도를 가로 챌 수 있습니다.