使用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