Android 常駐廣播和非常駐廣播


一、知識准備

  ①常駐廣播接受者:使用AndroidManifest.xml注冊,接受者不隨Activity的銷毀而銷毀,也就是擁有獨立的生命周期。

  ②非常駐廣播接受者:使用registerReceiver(receiver,intentfilter)對廣播接收者進行注冊。同事需要使用unregisterReceiver(receiver)注銷這個廣播接收者。注冊時表示創建廣播接收者,注銷時表示銷毀這個廣播接收者。生命周期由開發者決定。通常在activity的onCreate方法中創建廣播接收者,在onDestroy中銷毀廣播接收者。生命周期可控。

   ③建議了解http://www.cnblogs.com/xqz0618/p/msg_broadcast.html

二、項目案例一

【標題】利用非常駐廣播接受收到短信的廣播

【步驟】

  ①創建一個廣播NReceiver

  ②在Activity中進行注冊

  ③在Activity銷毀時注銷

【項目結構】

    

【NReceiver】

   

【MainActivity】

 1 import android.Manifest;  2 import android.content.BroadcastReceiver;  3 import android.content.IntentFilter;  4 import android.content.pm.PackageManager;  5 import android.support.v4.app.ActivityCompat;  6 import android.support.v4.content.ContextCompat;  7 import android.support.v7.app.AppCompatActivity;  8 import android.os.Bundle;  9 import android.util.Log; 10 
11 import com.example.administrator.myapplication.receiver.NReceiver; 12 
13 public class MainActivity extends AppCompatActivity { 14 
15     BroadcastReceiver receiver = null; 16 
17  @Override 18     protected void onCreate(Bundle savedInstanceState) { 19         super.onCreate(savedInstanceState); 20  setContentView(R.layout.activity_main); 21  getpermission(); 22 
23  registerBroadcast(); 24         
25  } 26 
27     private void getpermission() { 28         if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS) 29                 != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.RECEIVE_SMS) 30                 !=PackageManager.PERMISSION_GRANTED){ 31             ActivityCompat.requestPermissions(MainActivity.this,new String[]{ 32  Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS 33             },1); 34  } 35  } 36 
37     private void registerBroadcast() { 38         receiver = new NReceiver(); 39         IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 40  registerReceiver(receiver,filter); 41         Log.i("TAG", "registerBroadcast: ---------register"); 42  } 43 
44  @Override 45     protected void onDestroy() { 46         super.onDestroy(); 47  unregisterReceiver(receiver); 48  } 49 }

【提示】由於是要接收短信的廣播,所以需要獲取權限

【AndroidManifest】

1     <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
2     <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

【提示】非常駐型廣播無需在AndroidManifest中進行注冊廣播。

【效果】

  ①利用模擬器開發工具模擬發送信息

    

    

  ②將APP完全退出,再發送信息,不再收到提示

    

 

 二、項目案例二

【標題】常駐型廣播接收收到短信的廣播

【提示】再項目一得基礎上修改

【AndroidManifest】注冊

1 <receiver 2             android:name=".receiver.NReceiver"
3  android:enabled="true"
4  android:exported="true">
5             <intent-filter >
6                 <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
7             </intent-filter>
8         </receiver>

【MainActivity】

【提示】由於常駐型廣播已經在AndroidManifest注冊,則無須利用registerReceiver(receiver,intentfilter)進行注冊和銷毀。Activity中只需進行動態權限的申請

 1 public class MainActivity extends AppCompatActivity {  2 
 3     BroadcastReceiver receiver = null;  4 
 5  @Override  6     protected void onCreate(Bundle savedInstanceState) {  7         super.onCreate(savedInstanceState);  8  setContentView(R.layout.activity_main);  9  getpermission(); 10 
11  } 12 
13     private void getpermission() { 14         if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS) 15                 != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECEIVE_SMS) 16                 != PackageManager.PERMISSION_GRANTED) { 17             ActivityCompat.requestPermissions(MainActivity.this, new String[]{ 18  Manifest.permission.READ_SMS, Manifest.permission.RECEIVE_SMS 19             }, 1); 20  } 21  } 22 
23 }

【效果】

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM