廣播是Android的四大組件之一,類似于監聽不過是全局的。
我這是模仿Android系統廣播的做法做一個無序的廣播
所謂廣播就是由接受者和發送至者組成
為了區分動態廣播與靜態廣播我這里會分別建立以便區分
我這里先做一個發送者
布局樣式:
android:layout_height="wrap_content" android:hint="請輸入廣播內容" android:id="@+id/et_main_content" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="發送" android:onClick="send" />java代碼:
import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { PRivate EditText et_main_content; private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_content = (EditText) findViewById(R.id.et_main_content); intent = new Intent(); //設置廣播的名字(設置Action) intent.setAction("廣播名且具有唯一性"); }//按鈕的 onClick事件public void send(View view){String content=et_main_content.getText().toString(); //攜帶數據 intent.putExtra("data",content); //發送廣播(無序廣播) sendBroadcast(intent); }靜態接受者:
新建一個項目,在minActivity同級目錄新建一個類繼承BroadcastReceiver
我這里就打印一下了(值已經拿到)
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;/** * @author Zking-Snail * @time 2017/2/7 9:54 * @Version ${REV} */public class MyReceived01 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if("廣播名".equals(intent.getAction())){ String data=intent.getStringExtra("data"); Log.i("test","靜態接受者收到廣播了:"+data); } }}還有就是靜態廣播的話接受者要在清單文件里添加這個
<EditText android:layout_width="match_parent" <!--配置廣播接受者: .在清單文件中配置(靜態廣播) --> <receiver android:name=".類名"> <intent-filter> <action android:name="廣播名"></action> </intent-filter> </receiver>動態接受者:
與靜態的相識新建一個項目,在minActivity同級目錄新建一個類繼承BroadcastReceiver
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;/** * @author Zking-Snail * @time 2017/2/7 9:54 * @Version ${REV} */public class MyReceived01 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if("廣播名".equals(intent.getAction())){ String data=intent.getStringExtra("data"); Log.i("test","動態接受者收到廣播了:"+data); } }}不同的就是在動態廣播的MainActivity里要加點東西import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private MyReceived02 myReceived02; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceived02 = new MyReceived02(); intentFilter = new IntentFilter(); intentFilter.addAction("com.zking.g150831_android20_sender.955"); } @Override protected void onResume() { super.onResume(); //動態注冊廣播 registerReceiver(myReceived02,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //注銷動態廣播(一定要注銷不然報錯) unregisterReceiver(myReceived02); }}我這里就只是模仿安卓系統廣播的做法而已,可能不夠全面不喜勿噴,謝謝
新聞熱點
疑難解答