編輯:關於Android編程
既然有了順序就可以實現消息的一級一級的攔擊,或者在某一級中,修改傳遞來的數據,發送到下一級。(例子:車載中的發送消息,例如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
Android自定義帶水滴的進度條樣式(帶漸變色效果)
一、直接看效果二、直接上代碼1.自定義控件部分package com.susan.project.myapplication;import android.app.Act
解決 INSTALL FAILED CONFLICTING PROVIDER的問題方法
解決 INSTALL FAILED CONFLICTING PROVIDER的問題方法 在安裝Android應用時出現INSTALL FAILED
ANDROID 中設計模式的采用--行為模式
1 職責鏈模式 職責鏈模式的意圖為:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連
Android中事件的分發機制
Android事件構成在Android中,事件主要包括點按、長按、拖拽、滑動等,點按又包括單擊和雙擊,另外還包括單指操作和多指操作。所有這些都構成了Andro