1 广播应用接收器
1.1 广播应用接收器的注册
目录
Broadcast是四大组件之一,在使用的时候首先要进行注册,注册分为两种形式一种是静态注册,另一种是动态注册,下面将对,两种方式分别进行介绍
首先先创建一个javaclass
public class BroadCastReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
创建完毕以后,我们会发现,其中有一个onReceive的方法,从名字上可以知道这是刚被继承的时候触发
那么怎么使得它触发呢,一般有两个方式,下面将通过两种触发方式来打开音乐播放器,来分别介绍。
1.2静态注册
首先我们需要在andriodmainfast文件中进行注册
<receiver android:name=".BroadCastReciver"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
对于intent-filter我的理解是,当接受名字与发送广播相同的时候,广播接收器触发,接下来在上面
进行用户权限授权
<uses-permission android:name="android.permission.ACCEPT_HANDOVER"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
最后在发送广播的activity进行动态授权
在oncreate()中填入
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{"android.permission.RECEIVE_SMS"},1);}
在oncreate()外重写
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1:
if(grantResults[0]!=PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "未授权,无法实现预定的功能!", Toast.LENGTH_SHORT).show();
finish();
}else{
Toast.makeText(this, "请发一条短信验证...", Toast.LENGTH_SHORT).show();
}
}
}
接下来测试效果,因为我使用的是接受系统广播的类型,当接受短信的时候触发,所以,当接受到短信的时候,跳转,实验就成功了
可以发现页面出现了跳转,试验成功了
1.3 动态注册
动态注册需要自己编写发送器
IntentFilter intentFilter =new IntentFilter();
intentFilter.addAction("com.example.work.broadcast");
registerReceiver(mbroadCastReciver,intentFilter);
Context context =this;
//发送广播
findViewById(R.id.send_broadcast_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction("com.example.work.broadcast");
intent.setComponent(new ComponentName("com.example.work","com.example.work.BroadCastReciver"));
intent.putExtra("toast","this is my broadcast");
sendBroadcast(intent);
}
});
分为两个部分一个是注册广播一个是发送广播
广播接收器这样写,实现了,当点击按钮时动态注册,然后启动音乐播放服务,当接受到信息时静态注册暂停播放音乐
public class BroadCastReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("123", "onReceive: 1");
if(intent!=null)
{
if(TextUtils.equals(intent.getAction(),SendBroadCastActivity.COM_EXAMPLE_TEST_BROADCAST))
{
Intent start_music_intent = new Intent(context,music_Service.class);
context.startService(start_music_intent);
}
else if(TextUtils.equals(intent.getAction(),"android.provider.Telephony.SMS_RECEIVED"))
{
Intent stop_music_intent = new Intent(context,music_Service.class);
context.stopService(stop_music_intent);
}
}
}
}