使用Intent來廣播事件java
能夠對Intent的動做,數據和分類進行設置,從而使BroadcastReceiver可以精確的肯定他們的需求。在這種方案中,Intent動做字符串能夠用來標示廣播的時間,因此他應該是可以標示事件的惟一字符串。android
若是但願Intent中包 含數據,那麼能夠使用Intent的data屬性執行一個URI。也能夠包含extas來添加額外的基本值。微信
1)繼承BroadCastReceiver寫廣播接收器
app
package com.roc.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.util.Log; import android.widget.Toast; public class LifeformDetectedReceiver extends BroadcastReceiver { public static final String EXTRA_LIFEFORM_NAME = "EXTRA_LIFEFORM_NAME"; public static final String EXTRA_LATITUDE = "EXTRA_LAITODE"; public static final String EXTRA_LONGITUDE = "EXTRA_LONGITUDE"; public static final String ACTION_BURN = "com.paad.alien.action.BURN_IT_WITH_FIRE"; public static final String NEW_LIFEFORM = "com.paad.alien.action.NEW_LIFEFORM"; @Override public void onReceive(Context context, Intent intent) { Uri data = intent.getData(); String type = intent.getStringExtra(EXTRA_LIFEFORM_NAME); double lat = intent.getDoubleExtra(EXTRA_LATITUDE, 0); double lng = intent.getDoubleExtra(EXTRA_LONGITUDE, 0); /** * 執行更新內容,啓動service 更新ui 或者使用notification manager 等操做 */ Toast.makeText(context, "type"+type+" lat "+lat+" lng "+lng, Toast.LENGTH_LONG).show(); } }
2)接收廣播的兩種方式:ide
常駐型廣播:學習
指的是當應用程序關時,若是有信息發來,能夠接收廣播並作一些,更新ui,數據,啓動服務等事情 指的是在Manifest中進行配置ui
<receiver android:name="com.roc.receiver.LifeformDetectedReceiver"> <intent-filter > <action android:name="com.paad.alien.action.NEW_LIFEFORM"></action> </intent-filter> </receiver>
很是駐型廣播:this
package com.example.android; import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.roc.receiver.LifeformDetectedReceiver; public class SendBroacastActivity extends Activity implements OnClickListener { public static final String NEW_LIFEFORM_DETECTED = "com.roc.test"; private IntentFilter mIntentFilter; private LifeformDetectedReceiver mReceiver; private Button mBtn ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.start_receiver_layout); mBtn = (Button)findViewById(R.id.receiver_btn); mBtn.setOnClickListener(this); mIntentFilter = new IntentFilter(LifeformDetectedReceiver.NEW_LIFEFORM); mReceiver = new LifeformDetectedReceiver(); } @Override protected void onResume() { super.onResume(); registerReceiver(mReceiver, mIntentFilter); } @Override protected void onPause() { super.onPause(); unregisterReceiver(mReceiver); } @Override public void onClick(View v) { Intent intent = new Intent(LifeformDetectedReceiver.NEW_LIFEFORM); intent.putExtra(LifeformDetectedReceiver.EXTRA_LIFEFORM_NAME, "net"); intent.putExtra(LifeformDetectedReceiver.EXTRA_LATITUDE, 1.45); intent.putExtra(LifeformDetectedReceiver. EXTRA_LONGITUDE, 1.56); sendBroadcast(intent); } }
當應用程序結束後,廣播也隨之銷燬,接收不到任何信息 指的是registerReceiver(mReceiver, mIntentFilter);這樣的註冊方式,也稱之爲(動態註冊)
spa
3)啓動廣播:.net
@Override public void onClick(View v) { Intent intent = new Intent(LifeformDetectedReceiver.NEW_LIFEFORM); intent.putExtra(LifeformDetectedReceiver.EXTRA_LIFEFORM_NAME, "net"); intent.putExtra(LifeformDetectedReceiver.EXTRA_LATITUDE, 1.45); intent.putExtra(LifeformDetectedReceiver. EXTRA_LONGITUDE, 1.56); sendBroadcast(intent); }
經過在onClick中的點擊事件中的sendBroadCast來發送廣播。
想要學習更多關於android開發方面的知識,請關注微信訂閱號:android_develop