Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 發送有序廣播sendOrderBraodCast、截斷廣播和廣播之間的數據傳遞

android 發送有序廣播sendOrderBraodCast、截斷廣播和廣播之間的數據傳遞

編輯:關於Android編程

android中的廣播分有序廣播和無序廣播,無序廣播比較容易理解,有序廣播是根據你在清單中為每個reciver設置priority的大小(越大優先級越高)將消息依次的傳遞(由高到低),

既然有了順序就可以實現消息的一級一級的攔擊,或者在某一級中,修改傳遞來的數據,發送到下一級。(例子:車載中的發送消息,例如1號車(最高指揮車)下達消息給2號車,2號車接受到消息之後,根據命令將消息詳細化發給3號車(不一定是一個量車,有的車優先級可以相同))。

攔截可以使用abortBroadCast來攔截。數據的設置如果是原始廣播發送過來的,可以使用intent.getStringExtra("msg")獲得原始數據,你可以將新的數據使用setResultExtras()封裝傳遞到下一級去(下一級接收getResultExtras(true)),也可以使用setResultData()封裝數據發送到下一級(下一級使用getResultData接收)

示例代碼:

package com.example.demoorderbroadcast;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

	private View btnSendOrderBroadCast;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		btnSendOrderBroadCast = this.findViewById(R.id.btn);
		btnSendOrderBroadCast.setOnClickListener(new MyOnclickListner());
	}
	private class MyOnclickListner implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			if(btnSendOrderBroadCast==v){
				sendOrderBroadCast();
			}
		}
		
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	public void sendOrderBroadCast() {
		Intent intent=new Intent("com.pzf.mybroadcast");//清單文件中配置的
		intent.putExtra("msg", "ni hao ");
		sendOrderedBroadcast(intent, "com.pzf.permission");//receiverPermission:是自定義個權限
		
		
	}

}

package com.example.demoorderbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class MyOrderBroadcastReciver extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		String strMsg = intent.getStringExtra("msg");
		Log.e("pzf", "第一個:"+strMsg);
		Bundle extras=new Bundle();
		extras.putString("msg", "第一個界面傳過來的"+strMsg);
		setResultExtras(extras); //繼續向下川
		
	}
	
}

package com.example.demoorderbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class MyOrderBroadcastReciverTwo extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
//		abortBroadcast();//開啟此處,可以截斷廣播,不讓它傳到third中
		String strMsg = intent.getStringExtra("msg"); //獲取廣播的原始數據
		
		
		Log.e("pzf", "第二個:"+strMsg);
		Bundle extras=new Bundle();
		extras.putString("msg", "第二個界面傳過來的"+strMsg);
		setResultExtras(extras); //繼續向下川
		
		setResultData("第二個:"+strMsg); // "第二個:"+strMsg這是two中新的數據,傳遞到third中,在third中是用getResultData來獲得setResultData("")中的數據
	}

}

package com.example.demoorderbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class MyOrderBroadcastReciverThird extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		String resultData = getResultData();//獲取two中setResultData中的數據
		Bundle bundle = getResultExtras(true);//獲取two中setResultExtras中的數據
		String bundleData = bundle.getString("msg", "");//獲取two中setResultExtras()中的數據
		
		String strMsg = intent.getStringExtra("msg");//獲取廣播的原始數據
		Log.e("pzf", "第三個:"+strMsg);
		
		Log.e("pzf", "two中傳到third新的數據:"+resultData);
		Log.e("pzf", "two中setResultExtras(extras)傳到third新的數據:"+bundleData);
	}

}




    
	
	
    
        
            
                

                
            
        
        
            
                
                
            
        
        
              
                
                
            
        
        
              
                
                
            
            
        
        
        
    




源碼地址:

http://download.csdn.net/detail/pangzaifei/6939891


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved