本文实例讲述了Android使用广播(BroadCast)实现强制下线的方法。分享给大家供大家参考,具体如下:
使用广播简单模拟强制下线功能。
1、新建活动管理类
新建Activity活动管理类,方便管理所有活动。
package com.example.broadcastpractice; import java.util.ArrayList; import java.util.List; import android.app.Activity; /** * 所有活动管理器 * @author yy * */ public class ActivityCollector { public static List<Activity> activities = new ArrayList<Activity>(); /** * 添加活动 * @param activity */ public static void addActivity(Activity activity){ if(!activities.contains(activity)){ activities.add(activity); } } /** * 移除活动 * @param activity */ public static void removeActivity(Activity activity){ activities.remove(activity); } /** * 结束所有活动 */ public static void finishAll(){ for(Activity activity : activities){ if(!activity.isFinishing()){ activity.finish(); } } } }
2、新建活动基类
用于管理Activity。
package com.example.broadcastpractice; import android.app.Activity; import android.os.Bundle; /** * 所有活动的基类 * @author yy * */ public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //每创建一个活动,就加入到活动管理器中 ActivityCollector.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); //每销毁一个活动,就从活动管理器中移除 ActivityCollector.removeActivity(this); } }
3、新建登陆布局
新建登陆布局login.xml,如下:
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="1" > <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Account:" /> <EditText android:id="@+id/account" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Input your account here" android:ems="10" > </EditText> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Password:" /> <EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:inputType="textPassword" > </EditText> </TableRow> <TableRow android:id="@+id/tableRow3" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/login" android:layout_span="2" android:layout_height="wrap_content" android:text="Login" /> </TableRow> </TableLayout>
使用的是TableLayout,当然也可以使用其他布局,在该布局中,定义了登陆等相关信息。
4、新建登陆布局对应的Activity
新建登陆布局对应的Activity类,用于加载登陆布局:
package com.example.broadcastpractice; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class LoginActivity extends BaseActivity { private EditText accountEdit; private EditText passwordEdit; private Button loginButton; @Override protected void onCreate(Bundle savedInstanceState) { //首先调用父类的方法 super.onCreate(savedInstanceState); //加载登陆布局 setContentView(R.layout.login); //获取输入内容 accountEdit = (EditText) findViewById(R.id.account); passwordEdit = (EditText) findViewById(R.id.password); loginButton = (Button) findViewById(R.id.login); //注册按钮点击事件 loginButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String account = accountEdit.getText().toString(); String password = passwordEdit.getText().toString(); if(account.equals("yy") && password.equals("123456")){ //登陆成功 //启用MainActivity活动 Intent intent = new Intent(LoginActivity.this,MainActivity.class); //启动 startActivity(intent); //当前活动销毁 finish(); }else{ //登陆失败 //清空内容 accountEdit.setText(""); passwordEdit.setText(""); Toast.makeText(LoginActivity.this, "登陆失败,请重新登陆!!", Toast.LENGTH_SHORT).show(); } } }); } }
在登陆按钮的监听事件中,当登陆验证通过,新新一个活动MainActivity,同时销毁当前活动,如果登陆失败,则清空所填内容。
5、MainActivity
package com.example.broadcastpractice; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * 继承BaseActivity * @author yy * */ public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取按钮 Button forceOffline = (Button) findViewById(R.id.force_offline); //注册事件 forceOffline.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //启用广播 Intent intent = new Intent("com.example.broadcastpractice.FORCE_OFFLINE"); //发送广播--标准广播 sendBroadcast(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
下面是MainActivity对应的布局文件activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/force_offline" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="强制下线" /> </LinearLayout>
即在该布局中有一按钮,当点击时,发送强制下线的广播,当然了我们接下来要创建广播接收器:
6、广播接收器
package com.example.broadcastpractice; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.view.WindowManager; /** * 强制下线广播接收器 * @author yy * */ public class ForceOfflineBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { //对话框 AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("警告"); //正文 builder.setMessage("你已被强制下线,请重新登陆。"); //不可取消 builder.setCancelable(false); //按钮 builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //销毁所有活动 ActivityCollector.finishAll(); //启动登陆活动 Intent intent = new Intent(context,LoginActivity.class); //在广播中启动活动,需要添加如下代码 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }); AlertDialog alterDialog = builder.create(); //添加对话框类型:保证在广播中正常弹出 alterDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); //对话框展示 alterDialog.show(); } }
7、全集配置文件AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcastpractice" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- 登陆活动为主活动 --> <activity android:name="com.example.broadcastpractice.LoginActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- MainActivity活动 --> <activity android:name=".MainActivity"/> <!-- 广播接收器 --> <receiver android:name=".ForceOfflineBroadCastReceiver"> <intent-filter> <action android:name="com.example.broadcastpractice.FORCE_OFFLINE"/> </intent-filter> </receiver> </application> </manifest>
8、效果展示
当输入错误时,验证不通过,显示上方左图。当输入正确时,验证通过,进入MainActivity界面,点击按钮,显示上方右图。当点击确定时,会跳到登陆界面。
希望本文所述对大家Android程序设计有所帮助。
本文向大家介绍Android中的广播(BroadCast)详细介绍,包括了Android中的广播(BroadCast)详细介绍的使用技巧和注意事项,需要的朋友参考一下 什么是广播 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。我们拿广播电台来做个比方。我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调
本文向大家介绍Android实现静态广播监听器的方法,包括了Android实现静态广播监听器的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android实现静态广播监听器的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Android程序设计有所帮助。
对于并行处理,Apache Spark使用共享变量。 当驱动程序将任务发送到集群上的执行程序时,共享变量的副本将在集群的每个节点上运行,以便可以将其用于执行任务。 Apache Spark支持两种类型的共享变量 - Broadcast Accumulator 让我们详细了解它们。 广播(Broadcast) 广播变量用于跨所有节点保存数据副本。 此变量缓存在所有计算机上,而不是在具有任务的计算机上
前言 在现代的 web 应用程序中,WebSockets 被用来实现需要实时、即时更新的接口。当服务器上的数据被更新后,更新信息将通过 WebSocket 连接发送到客户端等待处理。相比于不停地轮询应用程序,WebSocket 是一种更加可靠和高效的选择。 我们先用一个电子商务网站作为例子来概览一下事件广播。当用户在查看自己的订单时,我们不希望他们必须通过刷新页面才能看到状态更新。我们希望一旦有更
广播(Broadcast)机制用于进程/线程间通信,广播分为广播发送和广播接收两个过程,其中广播接收者BroadcastReceiver便是Android四大组件之一。 BroadcastReceiver分为两类: 静态广播接收者:通过AndroidManifest.xml的标签来申明的BroadcastReceiver。 动态广播接收者:通过AMS.registerReceiver()方式注册的
问题内容: 我想实现一个侦听器,如果有人从任何应用程序复制了任何东西,它将监听。 我听说有哪个将侦听复制操作,但这不是接收方(据我了解)。我有一个示例应用程序,该应用程序背后的逻辑是,从系统启动启动服务并运行一个服务,该服务将侦听“复制”操作,但是我认为这会耗尽电池。我对吗? 因此,我该如何实现可以监听复制动作的广播接收器。 问题答案: 这是监听器: 只需注册: