使用Intent發送廣播

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

相關文章
相關標籤/搜索