版权声明:本文为博主原创文章,未经博主允许不得转载。
广播的实现:发送者和接受者
静态广播与动态广播 具体实现:在安卓软件程序中,静态广播都可以接收到发送者的信息,然而动态广播软件程序中他后台关闭后,不能接受到发送者的信息。
发送者 public class MainActivity extends AppCompatActivity {
PRivate EditText et_main_content;private Intent intent;@Overrideprotected 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("com.example.android20_sender.1008");}public void send(View view){ String content=et_main_content.getText().toString(); //携带数据 intent.putExtra("data",content); //发送广播(无序广播) //sendBroadcast(intent); //发送黏性广播 sendStickyBroadcast(intent);}}
静态广播清单文件配置
java代码接受者 public class MyReceived01 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(“com.example.android20_sender.1008”.equals(intent.getAction())){ String data=intent.getStringExtra(“data”); Log.i(“test”,”01号接受者收到广播了:”+data); } } }
动态广播要用到黏性广播(已过时,可以用),解决后台关闭后,接受发送者的信息,动态广播的优先级大于静态广播
在发送者清单文件中添加发送黏性广播的权限
动态广播跟静态差不多,只是不在清单文件中配置,用Java代码 public class MainActivity extends AppCompatActivity {
private MyReceived02 myReceived02;private IntentFilter intentFilter;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceived02 = new MyReceived02(); intentFilter = new IntentFilter(); intentFilter.addAction("com.example.android20_sender.1008");}@Overrideprotected void onResume() { super.onResume(); //动态注册广播 registerReceiver(myReceived02,intentFilter);}@Overrideprotected void onDestroy() { super.onDestroy(); //注销动态广播 unregisterReceiver(myReceived02);}}
Java代码接受者 public class MyReceived02 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(“com.example.android20_sender.1008”.equals(intent.getAction())){ String data=intent.getStringExtra(“data”); Log.i(“test”,”02号接受者收到粘性广播了:”+data); } } }
系统广播
添加接受者电话的状态
接受者的电话状态 public class MyPhoneState extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(“android.intent.action.PHONE_STATE”.equals(intent.getAction())){ //获取电话号码 String number=intent.getStringExtra(“incoming_number”); Log.i(“test”,”有电话进来了,”+number); Toast.makeText(context, “电话进来了:”+number, Toast.LENGTH_SHORT).show();
//获取电话状态 //电话管理者 TelephonyManager tm= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); int state=tm.getCallState(); switch (state) { case TelephonyManager.CALL_STATE_RINGING: Log.i("test","表白前"); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.i("test","热恋中"); break; case TelephonyManager.CALL_STATE_IDLE: Log.i("test","失恋了"); break; } }}}
新闻热点
疑难解答