Android使用广播(BroadCast)实现强制下线的方法

2019-12-10 19:17:09丽君

下面是MainActivity对应的布局文件activity_main.xml:

<LinearLayout xmlns:android="http://www.easck.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://www.easck.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>