版权声明:本文为博主原创文章,未经博主允许不得转载。
广播的实现:发送者和接受者
静态广播与动态广播
具体实现:在安卓软件程序中,静态广播都可以接收到发送者的信息,然而动态广播软件程序中他后台关闭后,不能接受到发送者的信息。
发送者
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("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;
@Override
protected 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");
}
@Override
protected void onResume() {
super.onResume();
//动态注册广播
registerReceiver(myReceived02,intentFilter);
}
@Override
protected 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;
}
}
}
}