SharedPreferences+BroadcastReceiver实现保存数据与强制下线

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.mjon.myapplication.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="user"
            android:textColor="@android:color/black"
            android:textSize="25sp" />

        <EditText
            android:id="@+id/user"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:textSize="18sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="pass"
            android:textColor="@android:color/black"
            android:textSize="25sp" />

        <EditText
            android:id="@+id/pass"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textSize="18sp" />

    </LinearLayout>

    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:text="Login" />

</LinearLayout>


activity_user.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.mjon.myapplication.UserActivity">

    <Button
        android:id="@+id/send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="send"/>

</android.support.constraint.ConstraintLayout>

BaseActivity:

package com.example.mjon.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class BaseActivity extends AppCompatActivity {

    private LocalBroadcastManager localBroadcastManager;

    private MyBroadcastReceiver myBroadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityColleector.addActivity(this);  //add Activity
        localBroadcastManager = LocalBroadcastManager.getInstance(this);  //通过本地广播注册和解绑
    }

    /**
     * 接收广播
     */
    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.mjon.myapplication.UNLOGIN");
        myBroadcastReceiver = new MyBroadcastReceiver();
        localBroadcastManager.registerReceiver(myBroadcastReceiver, intentFilter);
    }

    /**
     * 解绑广播
     */
    @Override
    protected void onPause() {
        super.onPause();
        localBroadcastManager.unregisterReceiver(myBroadcastReceiver);
    }

    /**
     * 移除Activity
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityColleector.removeActivity(this);
    }

    /**
     * 接收广播后的实现
     */
    class MyBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            ActivityColleector.finishAll();
            Intent restart = new Intent(context, MainActivity.class);
            startActivity(restart);
        }
    }

}

ActivityCollector:

package com.example.mjon.myapplication;

import android.app.Activity;

import java.util.ArrayList;
import java.util.List;

public class ActivityColleector {

    private static List<Activity> activities = new ArrayList<>();

    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    public static void finishAll() {
        for (Activity act : activities) {
            if (!act.isFinishing()) {
                act.finish();
            }
        }
        activities.clear();
    }
}

MainActivity:

package com.example.mjon.myapplication;

import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends BaseActivity {

    private EditText user;
    private EditText pass;
    private Button login;

    private SharedPreferences.Editor editor;
    private SharedPreferences sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        user = (EditText) findViewById(R.id.user);
        pass = (EditText) findViewById(R.id.pass);
        login = (Button) findViewById(R.id.login);
        login.setOnClickListener(listener);
        //获取sp实例
        sp = PreferenceManager.getDefaultSharedPreferences(this);
        String u_temp = sp.getString("user", "");
        String p_temp = sp.getString("pass", "");
        user.setText(u_temp);
        pass.setText(p_temp);
    }

    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.login:
                    String user_temp = user.getText().toString();
                    String pass_temp = pass.getText().toString();
                    editor = sp.edit();
                    editor.putString("user", user_temp);
                    editor.putString("pass", pass_temp);
                    editor.apply();
                    UserActivity.actionStart(MainActivity.this);
                    finish();
                    break;
                default:
                    break;
            }
        }
    };
}

UserActivity:

package com.example.mjon.myapplication;

import android.content.Context;
import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class UserActivity extends BaseActivity {

    private LocalBroadcastManager localBroadcastManager;

    public static void actionStart(Context context) {
        Intent intent = new Intent(context, UserActivity.class);
        context.startActivity(intent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        Button send = (Button) findViewById(R.id.send);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent in = new Intent("com.example.mjon.myapplication.UNLOGIN");
                localBroadcastManager.sendBroadcast(in);
            }
        });
    }
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mjon.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".UserActivity" />
    </application>

</manifest>



!!!完!!!

猜你喜欢

转载自blog.csdn.net/march0000/article/details/80294853
今日推荐