Android开发之初级开发_使用广播(BroadCast)进行强制下线功能
我们都知道,在使用QQ中,当我们设置了,不允许电脑和手机同时在线时,当我们在两个设备上登陆时,QQ都会将上一个强制下线
这样的功能应该如何实现呢?在Android中,通过broadcast可以很好的实现这样的功能。
//实现原理:
1.首先管理所有正在活动的activity,实现增,删
2.登录成功后,在页面放置一个按钮,用于发送强制下线广播
3.定义一个接收这个广播的接收器,关闭所有正在进行的活动,并返回到登录界面
步骤:
1.创建项目
2.实现登录界面布局,主界面布局
3.创建ActivityManager,用户管理活动
4.创建BaseActivity作为所有活动父类
5.创建MainAcitivity继承BaseActivity,实现登录逻辑
6.创建主界面逻辑,即SecondActivity发送广播
7.创建BroadcastReceiver,用于接收SecondActivity发送的强制下线广播
8.对AndroidManifest.xml文件进行配置
9.运行程序,查看效果。
实现:
布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" > </EditText> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPassword" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/btn_broadcast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="强制下线" /> </LinearLayout>
以上就是布局文件,丑了点,不要在乎这些细节
下面是ActivityManager.java
package com.hql.forceoffline; import java.util.ArrayList; import java.util.List; import android.app.Activity; public class ActivityManager { // 创建一个活动集合 public static List<Activity> activities = new ArrayList<Activity>(); // 添加活动 public static void addActivity(Activity activity) { activities.add(activity); } // 移除活动 public static void removedActivity(Activity activity) { activities.remove(activity); } // 移除所有活动 public static void finishAll() { for (Activity activity : activities) { if (!activity.isFinishing()) { activity.finish(); } } } }
BaseActivity.java
package com.hql.forceoffline; import android.app.Activity; import android.os.Bundle; public class BaseActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityManager.addActivity(this); } protected void onDestroy() { super.onDestroy(); ActivityManager.removedActivity(this); } }
MainActivity.java
package com.hql.forceoffline; 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 MainActivity extends BaseActivity { private EditText et_name, et_password; private Button btn_login; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_name = (EditText) findViewById(R.id.editText1); et_password = (EditText) findViewById(R.id.editText2); btn_login = (Button) findViewById(R.id.button1); btn_login.setOnClickListener(new OnClickListener() { public void onClick(View v) { String name = et_name.getText().toString(); String password = et_password.getText().toString(); if (name.equals("admin") && password.equals("123456")) { Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); startActivity(intent); } else { Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show(); } } }); } }
SecondActivity.java
package com.hql.forceoffline; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class SecondActivity extends Activity { private Button btn_broadcast; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ui); btn_broadcast = (Button) findViewById(R.id.btn_broadcast); btn_broadcast.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent("com.hql.forceoffline.FORCE_OFFLINE"); sendBroadcast(intent); } }); } }
ForceOfflineReceiver.java
package com.hql.forceoffline; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.view.WindowManager; public class ForceOfflineReceiver extends BroadcastReceiver { public void onReceive(final Context context, Intent intent) { AlertDialog.Builder dialogbBuilder = new AlertDialog.Builder(context); dialogbBuilder.setTitle("警告"); dialogbBuilder.setMessage("你已经被强制下线,请重新登录"); dialogbBuilder.setCancelable(false); dialogbBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { ActivityManager.finishAll(); Intent intent = new Intent(); intent.setClass(context, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }); AlertDialog alertDialog = dialogbBuilder.create(); alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); alertDialog.show(); } }
AndroidManifest.xml文件进行配置
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hql.forceoffline" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> <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.hql.forceoffline.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.hql.forceoffline.BaseActivity" /> <activity android:name="com.hql.forceoffline.SecondActivity" /> <receiver android:name=".ForceOfflineReceiver" > <intent-filter> <action android:name="com.hql.forceoffline.FORCE_OFFLINE" /> </intent-filter> </receiver> </application> </manifest>

浙公网安备 33010602011771号