Thứ Tư, 27 tháng 6, 2018

Android - Bộ thu phát sóng

Broadcast Receivers chỉ đơn giản là trả lời tin nhắn quảng bá từ các ứng dụng khác hoặc từ chính hệ thống trong học lập trình android. 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ể khởi tạo chương trình phát sóng để 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 để sử dụng, vì vậy đây là thiết bị phát sóng sẽ chặn thông báo này và sẽ bắt đầu hành động thích hợp.

Có hai bước quan trọng sau đây để làm cho BroadcastReceiver hoạt động cho các mục đích phát sóng hệ thống

Tạo Broadcast Receiver.

Đăng ký Broadcast Receiver

Có một bước bổ sung trong trường hợp bạn sẽ triển khai các ý định tùy chỉnh của mình thì bạn sẽ phải tạo và phát những ý định đó.

Tạo Broadcast Receiver

Một bộ thu phát sóng được thực hiện 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 .
lớp công khai MyReceiver mở rộng BroadcastReceiver { lớp MyReceiver mở rộng BroadcastReceiver {    
   @Ghi đè@Ghi đè
   public void onReceive (bối cảnh bối cảnh, ý định Intent) {công trống onReceive ( Context bối cảnh , ý định ý định ) {   
      Toast.makeText (ngữ cảnh, "Intent Detected.", Toast.LENGTH_LONG) .show ();Bánh mì nướng . makeText ( ngữ cảnh , "Intent Detected." , Bánh mì nướng . LENGTH_LONG ). show ();  
   }}
}}

Đăng ký Broadcast Receiver

Một ứng dụng lắng nghe ý định phát sóng cụ thể bằng cách đăng ký bộ thu phát sóng trong tệp AndroidManifest.xml . Hãy xem xét chúng tôi sẽ đăng ký MyReceiver cho sự kiện được tạo hệ thống ACTION_BOOT_COMPLETED được hệ thống kích hoạt khi hệ thống Android đã hoàn tất quá trình khởi động.
ảnh minh họa

<ứng dụng
   android: icon = "@ drawable / ic_launcher"android: icon = "@ drawable / ic_launcher"
   android: label = "@ string / app_name"android: label = "@ string / app_name"
   android: theme = "@ style / AppTheme">android: theme = "@ style / AppTheme" > 
   <receiver android: name = "MyReceiver"><receiver android: name = "MyReceiver" > 
   
      <intent-filter><intent-filter>
         <action android: name = "android.intent.action.BOOT_COMPLETED"><action android: name = "android.intent.action.BOOT_COMPLETED" > 
         </ action></ action>
      </ intent-filter></ intent-filter>
   
   </ người nhận></ người nhận>
</ application></ application>

Bây giờ bất cứ khi nào thiết bị Android của bạn được khởi động, nó sẽ bị chặn bởi BroadcastReceiver MyReceiver và logic được triển khai bên trong onReceive () sẽ được thực hiện.

Có một số sự kiện do hệ thống tạo ra được định nghĩa là các trường tĩnh cuối cùng trong lớp Intent . Bảng sau đây liệt kê một vài sự kiện hệ thống quan trọng.

Sr.NoSự kiện & mô tả sự kiện
1android.intent.action.BATTERY_CHANGED
Phát sóng dính có chứa trạng thái sạc, mức và thông tin khác về pin.
2android.intent.action.BATTERY_LOW
Cho biết tình trạng pin yếu trên thiết bị.
3android.intent.action.BATTERY_OKAY
Cho biết pin bây giờ đã ổn sau khi thấp.
4android.intent.action.BOOT_COMPLETED
Điều này được phát một lần, sau khi hệ thống khởi động xong.
5android.intent.action.BUG_REPORT
Hiển thị hoạt động để báo cáo lỗi.
6android.intent.action.CALL
Thực hiện cuộc gọi đến ai đó được chỉ định bởi dữ liệu.
7android.intent.action.CALL_BUTTON
Người dùng nhấn nút "gọi" để chuyển đế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.
số 8android.intent.action.DATE_CHANGED
Ngày đã thay đổi.
9android.intent.action.REBOOT
Khởi động lại thiết bị.

Mục đích phát sóng tùy chỉnh

Nếu bạn muốn bản thân ứng dụng của bạn nên 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 là sticky , có nghĩa là Intent bạn đang gửi vẫn ở lại sau khi chương trình phát sóng hoàn tất.
public void broadcastIntent (Chế độ xem) { void broadcastIntent ( Chế độ xem ) { 
   Intent intent = new Intent ();Intent intent = new Intent ();  
   intent.setAction ("com.tutorialspoint.CUSTOM_INTENT");. setAction ( "com.tutorialspoint.CUSTOM_INTENT" );
   sendBroadcast (ý định);( ý định );
}}
Mục đích này com.tutorialspoint.CUSTOM_INTENT cũng có thể được đăng ký theo cách tương tự như chúng tôi đã regsitered hệ thống tạo ra ý định.
<ứng dụng
   android: icon = "@ drawable / ic_launcher"android: icon = "@ drawable / ic_launcher"
   android: label = "@ string / app_name"android: label = "@ string / app_name"
   android: theme = "@ style / AppTheme">android: theme = "@ style / AppTheme" > 
   <receiver android: name = "MyReceiver"><receiver android: name = "MyReceiver" > 
   
      <intent-filter><intent-filter>
         <action android: name = "com.tutorialspoint.CUSTOM_INTENT"><action android: name = "com.tutorialspoint.CUSTOM_INTENT" > 
         </ action></ action>
      </ intent-filter></ intent-filter>
   
   </ người nhận></ người nhận>
</ application></ application>

Thí dụ

Ví dụ này sẽ giải thích cho bạn cách tạo BroadcastReceiver để chặn ý định tùy chỉnh. Một khi bạn đã quen thuộc với ý định tùy chỉnh, thì bạn có thể lập trình ứng dụng của mình để chặn các ý định được tạo ra của hệ thống. Vì vậy, hãy làm theo các bước sau để sửa đổi ứng dụng Android mà chúng tôi đã tạo trong chương Hello World Example

Bậc thangSự miêu tả
1Bạn sẽ sử dụng Android studio để tạo một ứng dụng Android và đặt tên nó là Ứng dụng của tôi dưới dạng góicom.example.tutorialspoint7.myapplication như được giải thích trong chương Hello World Example .
2Sửa đổi tệp hoạt động chính MainActivity.java để thêm phương thứcbroadcastIntent () .
3Tạo một tệp java mới có tên là MyReceiver.java trong góicom.example.tutorialspoint7.myapplication để định nghĩa BroadcastReceiver.
4Một ứng dụng có thể xử lý một hoặc nhiều ý định hệ thống và tùy chỉnh mà không có bất kỳ hạn chế nào. Mọi ý định bạn muốn chặn phải được đăng ký trong tệp AndroidManifest.xml của bạn bằng cách sử dụng thẻ <receiver ... />
5Sửa đổi nội dung mặc định của tệp res / layout / activity_main.xml để bao gồm một nút để phát sóng ý định.
6Không cần phải sửa đổi tệp chuỗi, Android studio sẽ xử lý tệp string.xml.
7Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của các thay đổi được thực hiện trong ứng dụng.
Sau đây là nội dung của tệp hoạt động chính đã sửa đổi MainActivity.java . Tệp 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.
package com.example.tutorialspoint7.myapplication;com . ví dụ . tutorialspoint7 . myapplication ;

nhập android.app.Activity;nhập Android . ứng dụng . Hoạt động ;
nhập android.content.Intent;nhập Android . nội dung . Ý định ;
nhập android.os.Bundle;nhập Android . os . Gói ;
nhập android.view.View;nhập Android . xem . Xem ;

public class MainActivity mở rộng Activity {public class MainActivity mở rộng Activity {     

   / ** Được gọi khi hoạt động được tạo lần đầu tiên. * // ** Được gọi khi hoạt động được tạo lần đầu tiên. * /
   @Ghi đè@Ghi đè
   
   public void onCreate (Bundle savedInstanceState) {public void onCreate ( Bundle savedInstanceState ) {  
      super.onCreate (savedInstanceState);siêu . onCreate ( savedInstanceState );
      setContentView (R.layout.activity_main);( R . Bố trí . Activity_main );
   }}


   // phát sóng ý định tùy chỉnh.// phát sóng ý định tùy chỉnh.
      
   public void broadcastIntent (Chế độ xem) {public void broadcastIntent ( Chế độ xem ) { 
      Intent intent = new Intent ();Intent intent = new Intent ();  
      intent.setAction ("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast (ý định);. setAction ( "com.tutorialspoint.CUSTOM_INTENT" ); sendBroadcast ( ý định );
   }}
}}
Sau đây là nội dung của MyReceiver.java :
package com.example.tutorialspoint7.myapplication;com . ví dụ . tutorialspoint7 . myapplication ;

nhập android.content.BroadcastReceiver;nhập Android . nội dung . BroadcastReceiver ;
nhập android.content.Context;nhập Android . nội dung . Bối cảnh ;
nhập android.content.Intent;nhập Android . nội dung . Ý định ;
nhập android.widget.Toast;nhập Android . tiện ích . Bánh mì nướng ;

/ **/ **
 * Được tạo bởi TutorialsPoint7 vào ngày 23/8/2016.
 * /
lớp công khai MyReceiver mở rộng BroadcastReceiver {lớp công khai MyReceiver mở rộng BroadcastReceiver {    
   @Ghi đè@Ghi đè
   public void onReceive (bối cảnh bối cảnh, ý định Intent) {công trống onReceive ( Context bối cảnh , ý định ý định ) {   
      Toast.makeText (ngữ cảnh, "Intent Detected.", Toast.LENGTH_LONG) .show ();Bánh mì nướng . makeText ( ngữ cảnh , "Intent Detected." , Bánh mì nướng . LENGTH_LONG ). show ();  
   }}
}}
Sau đây sẽ là nội dung sửa đổi của tệp AndroidManifest.xml . Ở đây chúng tôi đã thêm thẻ <receiver ... /> để bao gồm dịch vụ của chúng tôi:
<? xml version = "1.0" encoding = "utf-8"?>xml version = "1.0" encoding = "utf-8" ?>
<manifest xmlns: android = "http://schemas.android.com/apk/res/android"<manifest xmlns: android = "http://schemas.android.com/apk/res/android" 
   package = "com.example.tutorialspoint7.myapplication">package = "com.example.tutorialspoint7.myapplication" >

   <ứng dụng<ứng dụng
      android: allowBackup = "true"android: allowBackup = "true"
      android: icon = "@ mipmap / ic_launcher"android: icon = "@ mipmap / ic_launcher"
      android: label = "@ string / app_name"android: label = "@ string / app_name"
      android: supportRtl = "true"android: supportRtl = "true"
      android: theme = "@ style / AppTheme">android: theme = "@ style / AppTheme" >
  
      <hoạt động android: name = ". MainActivity"><activity android: name = ".MainActivity" > 
         <intent-filter><intent-filter>
            <action android: name = "android.intent.action.MAIN" /><action android: name = "android.intent.action.MAIN" />  

            <category android: name = "android.intent.category.LAUNCHER" /><category android: name = "android.intent.category.LAUNCHER" />  
         </ intent-filter></ intent-filter>
      </ hoạt động></ hoạt động>
   
      <receiver android: name = "MyReceiver"><receiver android: name = "MyReceiver" > 
         <intent-filter><intent-filter>
            <action android: name = "com.tutorialspoint.CUSTOM_INTENT"><action android: name = "com.tutorialspoint.CUSTOM_INTENT" > 
            </ action></ action>
         </ intent-filter></ intent-filter>

      </ người nhận></ người nhận>
   </ application></ application>

</ manifest></ manifest>
Sau đây sẽ là nội dung của tệp res / layout / activity_main.xml để bao gồm một nút để phát sóng ý định tùy chỉnh của chúng tôi
<RelativeLayout  
   xmlns: android = "http://schemas.android.com/apk/res/android"xmlns: android = "http://schemas.android.com/apk/res/android"
   xmlns: tools = "http://schemas.android.com/tools" xmlns: tools = "http://schemas.android.com/tools" 
   android: layout_width = "match_parent"android: layout_width = "match_parent"
   android: layout_height = "match_parent" android: layout_height = "match_parent" 
   android: paddingLeft = "@ dimen / activity_horizontal_margin"android: paddingLeft = "@ dimen / activity_horizontal_margin"
   android: paddingRight = "@ dimen / activity_horizontal_margin"android: paddingRight = "@ dimen / activity_horizontal_margin"
   android: paddingTop = "@ dimen / activity_vertical_margin"android: paddingTop = "@ dimen / activity_vertical_margin"
   android: paddingBottom = "@ dimen / activity_vertical_margin" android: paddingBottom = "@ dimen / activity_vertical_margin" 
   công cụ: context = ". MainActivity">tools: context = ".MainActivity" >
   
   <TextView<TextView
      android: id = "@ + id / textView1"android: id = "@ + id / textView1"
      android: layout_width = "wrap_content"android: layout_width = "wrap_content"
      android: layout_height = "wrap_content"android: layout_height = "wrap_content"
      android: text = "Ví dụ về phát sóng"android: text = "Ví dụ về phát sóng"
      android: layout_alignParentTop = "true"android: layout_alignParentTop = "true"
      android: layout_centerHorizontal = "true"android: layout_centerHorizontal = "true"
      android: textSize = "30dp" />android: textSize = "30dp" /> 
      
   <TextView<TextView
      android: id = "@ + id / textView2"android: id = "@ + id / textView2"
      android: layout_width = "wrap_content"android: layout_width = "wrap_content"
      android: layout_height = "wrap_content"android: layout_height = "wrap_content"
      android: text = "Hướng dẫn điểm"android: text = "Hướng dẫn điểm"
      android: textColor = "# ff87ff09"android: textColor = "# ff87ff09"
      android: textSize = "30dp"android: textSize = "30dp"
      android: layout_above = "@ + id / imageButton"android: layout_above = "@ + id / imageButton"
      android: layout_centerHorizontal = "true"android: layout_centerHorizontal = "true"
      android: layout_marginBottom = "40dp" />android: layout_marginBottom = "40dp" /> 
      
   <ImageButton<ImageButton
      android: layout_width = "wrap_content"android: layout_width = "wrap_content"
      android: layout_height = "wrap_content"android: layout_height = "wrap_content"
      android: id = "@ + id / imageButton"android: id = "@ + id / imageButton"
      android: src = "@ drawable / abc"android: src = "@ drawable / abc"
      android: layout_centerVertical = "true"android: layout_centerVertical = "true"
      android: layout_centerHorizontal = "true" />android: layout_centerHorizontal = "true" /> 
      
   <Nút<Nút
      android: layout_width = "wrap_content"android: layout_width = "wrap_content"
      android: layout_height = "wrap_content"android: layout_height = "wrap_content"
      android: id = "@ + id / button2"android: id = "@ + id / button2"
      android: text = "Mục đích phát sóng"android: text = "Mục đích phát sóng"
      android: onClick = "broadcastIntent"android: onClick = "broadcastIntent"
      android: layout_below = "@ + id / imageButton"android: layout_below = "@ + id / imageButton"
      android: layout_centerHorizontal = "true" />android: layout_centerHorizontal = "true" /> 

</ RelativeLayout></ RelativeLayout>

Hãy thử chạy Hello World đã sửa đổi của chúng ta ! ứng dụng chúng tôi vừa sửa đổi. Tôi cho rằng bạn đã tạo AVD của mình trong khi thiết lập môi trường.

Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Chạy biểu tượng từ thanh công cụ. 

Android Studio cài đặt ứng dụng trên AVD của bạn và khởi động ứng dụng và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, ứng dụng sẽ hiển thị cửa sổ Trình mô phỏng sau 

ảnh minh họa

Bây giờ để phát sóng ý định tùy chỉnh của chúng ta, hãy nhấp vào nút Intent Broadcast , điều này sẽ phát sóng ý định tùy chỉnh của chúng tôi "com.tutorialspoint.CUSTOM_INTENT" sẽ bị chặn bởi MyReceiver BroadcastReceiver đã đăng ký của chúng tôi và theo logic thực hiện của chúng tôi, bánh mì nướng sẽ xuất hiện ở phía dưới của trình giả lập như sau 

ảnh minh họa

Bạn có thể thử triển khai BroadcastReceiver khác để chặn các hệ thống được tạo ra như hệ thống khởi động, ngày thay đổi, pin yếu, v.v.

Không có nhận xét nào:

Đăng nhận xét

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...