今天来说说广播,广播BroadcastReceiver,广播的话也分为无序和有序的,我们今天来说说无序广播和系统广播。分为发送者和接收者,它们的关系是一对多的关系,发送者只要设置名字和数据,接收者接收,接收者注册,分为两种注册,一种是静态注册,一种是动态注册,静态注册是写在清单文件里的,动态注册是写在java代码里面的,
发送广播无序的,里面还有一个黏性发送,用一个即可MainActivity
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();
//设置广播的名字
intent.setAction("com.example.android_20_sender.955");
}
public void send(View view){
String content=et_main_content.getText().toString();
//携带数据
intent.putExtra("date",content);
//发送广播(无序广播)
// sendBroadcast(intent);
//发送粘性广播
sendStickyBroadcast(intent);
}
静态接收和动态接收:
在清单里面配置
<receiver android:name=".MyReceived01">
<intent-filter>
<action android:name="com.example.android_20_sender.955"></action>
</intent-filter>
</receiver>
public class MyReceived01 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if ("com.example.android_20_sender.955".equals(intent.getAction())){
String date= intent.getStringExtra("date");
Log.i("test","静态接受者收到广播"+date);
}
}
动态广播:
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.android_20_sender.955");
}
@Override
protected void onResume() {
super.onResume();
//动态注册广播
registerReceiver(myReceived02, intentFilter);
}
//销毁动态广播
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceived02);
}
public class MyReceived02 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if ("com.example.android_20_sender.955".equals(intent.getAction())){
String date= intent.getStringExtra("date");
Log.i("test","动态接受者收到广播"+date);
}
}
接下来讲讲系统广播,就简单的讲讲广播系统的电话状态,在这里你先要在清单里设置权限,就允许读取手机状态的权限,
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android_20_phonestate">
<!--读取电话状态权限-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyPhoneState">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE">
</action>
</intent-filter>
</receiver>
</application>
</manifest>
下面是一个监听:
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;
}
}
谢谢观看,今天的分享就到这里!