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>

 

posted @ 2014-10-09 09:21  loneliness__白色  阅读(192)  评论(0)    收藏  举报