Broadcast Receivers chỉ đơn giản trả lời các tin nhắn quảng bá từ các ứng dụng khác hoặc từ chính hệ thống. Những thông điệp này đôi khi được gọi là sự kiện hoặc ý định. Ví dụ: các ứng dụng cũng có thể bắt đầu broadcasts để cho các ứng dụng khác biết rằng một số dữ liệu đã được tải xuống thiết bị và có sẵn để chúng sử dụng, vì vậy đây là broadcast receiver sẽ chặn giao tiếp này và sẽ bắt đầu hành động thích hợp.
Có hai bước quan trọng sau để làm cho BroadcastReceiver hoạt động cho các ý định được phát sóng của hệ thống- Tạo Broadcast Receivers
- Đăng ký Broadcast Receivers
Có một bước bổ sung trong trường hợp bạn sẽ thực hiện ý định tùy chỉnh của mình thì bạn sẽ phải tạo và phát các ý định đó.
Tạo Broadcast Receiver
Một Broadcast quảng bá được triển khai như một lớp con của lớp BroadcastReceiver và ghi đè phương thức onReceive() trong đó mỗi thông báo được nhận dưới dạng tham số đối tượng Intent.
public class MyReceiver extends BroadcastReceiver {Đăng ký Broadcast Receiver
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
Một ứng dụng lắng nghe ý định broadcast intents bằng cách đăng ký một máy thu quảng bá trong tệp AndroidManifest.xml. Hãy xem xét chúng tôi sẽ đăng ký MyReceiver cho sự kiện do hệ thống tạo ra ACTION_BOOT_COMPLETED được hệ thống kích hoạt sau khi hệ thống Android hoàn tất quy trình khởi động.
<applicationBây giờ, bất cứ khi nào thiết bị Android của bạn được khởi động, nó sẽ bị BroadcastReceiver MyReceiver chặn và logic được triển khai bên trong onReceive () sẽ được thực thi.
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>
Có một số sự kiện được tạo bởi hệ thống được định nghĩa là các trường tĩnh cuối cùng trong lớp Intent. Bảng sau liệt kê một vài sự kiện hệ thống quan trọng.
android.intent.action.BATTERY_CHANGED
Trạng thái sạc, mức độ và thông tin khác về pin.
android.intent.action.BATTERY_LOW
Cho biết tình trạng pin yếu trên thiết bị.
android.intent.action.BATTERY_OKAY
Cho biết pin bây giờ đã ổn sau khi hết pin.
android.intent.action.BOOT_COMPLETED
Điều này được phát một lần, sau khi hệ thống khởi động xong.
android.intent.action.BUG_REPORT
Hiển thị hoạt động để báo cáo một lỗi.
android.intent.action.CALL
Thực hiện cuộc gọi đến một người được chỉ định bởi dữ liệu.
android.intent.action.CALL_BUTTON
Người dùng nhấn nút "gọi" để đến trình quay số hoặc giao diện người dùng thích hợp khác để thực hiện cuộc gọi.
android.intent.action.DATE_CHANGED
Ngày đã thay đổi.
android.intent.action.REBOOT
Có thiết bị khởi động lại.
Broadcasting Custom Intents
Nếu bạn muốn ứng dụng của mình tự tạo và gửi các ý định tùy chỉnh thì bạn sẽ phải tạo và gửi các ý định đó bằng cách sử dụng phương thức sendBroadcast () bên trong lớp hoạt động của bạn. Nếu bạn sử dụng phương thức sendStickyBroadcast (Intent), Intent bị dính, nghĩa là Ý định bạn đang gửi ở lại sau khi phát xong.
public void broadcastIntent(View view) {Trong file manifest.xml
Intent intent = new Intent();
intent.setAction("com.anhttvn.CUSTOM_INTENT");
sendBroadcast(intent);
}
<applicationThí dụ BroadcastReceiver
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="MyReceiver">
<intent-filter>
<action android:name="com.anhttvn.CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
Ví dụ này sẽ giải thích cho bạn làm thế nào để tạo BroadcastReceiver trong Android để ý định đánh chặn tùy chỉnh. Một khi bạn đã quen thuộc với mục đích tùy chỉnh, sau đó bạn có thể lập trình ứng dụng của bạn để hệ thống đánh chặn ý đồ tạo ra. Vì vậy, hãy làm theo các bước sau để sửa đổi ứng dụng Android, chúng tôi tạo ra trong Hello World:
Sau đây là nội dung của tệp hoạt động chính được sửa đổi MainActivity.java. Tập tin này có thể bao gồm từng phương pháp vòng đời cơ bản. Chúng tôi đã thêm phương thức BroadcastIntent () để phát một ý định tùy chỉnh.
public class MainActivity extends Activity {Sau đây là nội dung của MyReceiver.java:
/** 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.anhttvn.CUSTOM_INTENT"); sendBroadcast(intent);
}
}
public class MyReceiver extends BroadcastReceiver{Sau đây sẽ sửa đổi nội dung của tệp AndroidManifest.xml. Ở đây chúng tôi đã thêm thẻ <receive ... /> để bao gồm dịch vụ của chúng tôi:
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
}
}
<?xml version="1.0" encoding="utf-8"?>Sau đây sẽ là nội dung của res/layout/Activity_main.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.anhttvn.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.anhttvn.CUSTOM_INTENT">
</action>
</intent-filter>
</receiver>
</application>
</manifest>
<RelativeLayoutHình ảnh của việc thực hiện gửi sự kiện trọng Broadcast trong android.
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>
No comments:
Post a Comment