首页 > 编程知识 正文

在线英语新闻广播(英语广播电台在线收听频道)

时间:2023-05-03 19:15:39 阅读:66137 作者:1435

先深入一波动态注册。 写在代码中比xml更难修改却被称为动态注册。 哪里的话。

首先,演示如何接收系统广播。 这里是接受网络变化的广播。 具体来说,在评论中仔细看看吧。

publicclassmainactivityextendsappcompatactivity { privateintentfilterintentfilter; 私有网络接收器; @ overrideprotectedvoidoncreate (bundlesavedinstancestate ) super.oncreate ) savedinstancestate; setcontentview (r.layout.activity _ main; //网络发生变化时,将发送值为Android.net.conn.connectivity _ change的广播,我们将在IntentFilter中过滤其他广播。 intentFilter=new IntentFilter (; intent filter.addaction (Android.net.conn.connectivity _ change ); //注册接收器过滤器的网络接收器=newnetworkreceiver (; 注册接收器(网络接收器,intent过滤器); 放弃//事件时,请务必注销接收器。 事件未被回收,内存可能会泄漏。 @ overrideprotectedvoidondestroy () { super.onDestroy ); 网络接收器; } classnetworkreceiverextendsbroadcastreceiver { @ overridepublicvoidonreceive (上下文上下文,上下文) toast.makagage

public void onreceive (上下文,Intent intent ) ) connectivitymanagerconnectivitymanager=) connectivitymanager ) getsysyty 在AndroidManifest注册文档中,输入//uses-permission Android 3360 name=' Android.permission.access _ network networkinfonetworors 网络信息!=nullnetworkInfo.isAvailable () ) toast.maketext ) context,“可用”,Toast.LENGTH_SHORT ).show ); }else{toast.maketext(context,'不可用',Toast.LENGTH_SHORT ).show ); }从Android8.0开始,静态注册不能接收所有隐式广播,也就是没有指定接收对象的广播。 大多数系统广播是隐式广播。 这里显示的是明确地,即指定接收对象的广播方法和静态注册来接收此广播。

活动主按钮的响应事件

button.setonclicklistener (new view.onclick listener () overridepublicvoidonclick (view view ) ) intent intent=new intent.set component (newcomponentname (com.example.broadcasts (,com.example.broadcasts.bootcompleterececeivent STS

Broadcast(intent); } });

广播接收器

public class BootCompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Toast.makeText(context,"Boot Complete",Toast.LENGTH_SHORT).show(); }}

进行静态注册

<receiver android:name=".BootCompleteReceiver" android:enabled="true" android:exported="true"> //priority属性来设置该广播的优先级 //如果发出的是有序广播,会由优先级高的先接受到广播 //则这个广播接收器可以通过abortBroadCast方法来截停广播传递 <intent-filter android:priority="100"> <action android:name="WARING"/> </intent-filter> </receiver> 强制下线功能

设想一个情景,账号从其他地方登录了,怎么让用户强制下线并且返回登陆界面。

为了让用户不论在哪个活动中都能收到消息,并且不用在每个活动中都写一样的逻辑,可以采用重写所有活动父类的方法将下线的逻辑写父类中,父类中用一个内部的广播接收器来接受异地登陆的广播,一旦接受到相应的广播,就将存储于链表中的当前Task的所有活动依次关闭即可。

先写一个登录活动,设置为主活动,验证账号密码正确性之后跳转到功能活动。

public class LoginActivity extends ParentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); //获取登陆界面组件 EditText account = findViewById(R.id.account); EditText password = findViewById(R.id.password); Button login =findViewById(R.id.login); login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String user = (String)account.getText().toString(); String pwd = (String)password.getText().toString(); //初始账户密码验证 if(user.equals("admin")&&pwd.equals("123456")){ Intent skip=new Intent(LoginActivity.this,MainActivity.class); startActivity(skip); } } }); }}

接下来编写活动的公共父类,要如意的发夹实现接受到广播后,结束该任务所有活动的功能,同时写广播接收器用来接受功能活动发出的下线广播。

注意:为了保证只有栈顶的活动能接收到这条广播,因此要将广播注册写在Resume和Pause方法中。

public class ParentActivity extends AppCompatActivity { OffLineReceiver offLineReceiver; //用一个链表来存储所有的活动 List<ParentActivity> list=new LinkedList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); list.add(this); } @Override protected void onDestroy() { super.onDestroy(); list.remove(this); } protected void allFinish(){ for(ParentActivity activity:list){ activity.finish(); } } //为了保证只有栈顶的活动能接收到这条广播,因此要将广播注册写在Resume和Pause方法中 //在活动的生命周期中,活动即将到达前台的时候会调用onResume方法 //当系统要将活动放入背景中或活动被部分遮盖时,将调用OnPause @Override protected void onResume() { super.onResume(); IntentFilter intentFilter=new IntentFilter("OFFLINE"); offLineReceiver=new OffLineReceiver(); registerReceiver(offLineReceiver,intentFilter); } @Override protected void onPause() { super.onPause(); if(offLineReceiver!=null){ unregisterReceiver(offLineReceiver); offLineReceiver=null; } } class OffLineReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { AlertDialog.Builder builder=new AlertDialog.Builder(context); builder.setTitle("WARNING"); builder.setMessage("offline?"); //设置这个警示窗口不可取消 builder.setCancelable(false); builder.setPositiveButton("OK", (dialogInterface, i) -> { //关闭所有活动 allFinish(); //重启登录活动 startActivity(new Intent(context,LoginActivity.class)); }); builder.show(); } }}

最后通过功能活动的按钮发送下线广播

public class LoginActivity extends ParentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); //获取登陆界面组件 EditText account = findViewById(R.id.account); EditText password = findViewById(R.id.password); Button login =findViewById(R.id.login); login.setOnClickListener(view -> { String user = account.getText().toString(); String pwd = password.getText().toString(); //初始账户密码验证 if(user.equals("admin")&&pwd.equals("123456")){ Intent skip=new Intent(LoginActivity.this,MainActivity.class); startActivity(skip); } }); }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。