4、闪屏后登陆

来源:互联网 发布:迪蒙火花机编程视频 编辑:程序博客网 时间:2024/05/21 09:16
如果是第一次使用或者是未登陆状态,则显示登录界面。

创建登录视图:LoginActivity

布局文件:
<?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:background="#ffffff"
android:orientation="vertical" >

<include layout="@layout/layout_title"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="12dp" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/abs__spinner_ab_default_holo_light">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:text="@string/countries_and_areas"
android:textColor="#353535"
android:textSize="16sp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:text="中国"
android:textColor="#45c01a"
android:textSize="16sp" />

<View
android:layout_width="match_parent"
android:layout_height="0.1dp"
android:layout_alignParentBottom="true"
android:background="#dbdbdb" />
</RelativeLayout>

<RelativeLayout
android:layout_width="match_parent"
android:layout_marginTop="10dp"
android:layout_height="48dp" >

<EditText
android:id="@+id/et_usertel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:background="@drawable/edittext_login"
android:hint="你的手机号码"
android:inputType="phone"
android:paddingLeft="90dp"
android:singleLine="true"
android:maxLength="11"
android:textColorHint="#DDDDDD"
android:textSize="16sp" />

<TextView
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/et_usertel"
android:layout_centerVertical="true"
android:layout_marginLeft="24dp"
android:text="+86"
android:textColor="#353535"
android:textSize="16sp" />
</RelativeLayout>

<RelativeLayout
android:layout_width="match_parent"
android:layout_marginTop="10dp"
android:layout_height="48dp" >

<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:background="@drawable/edittext_login"
android:hint="填写密码"
android:paddingLeft="90dp"
android:password="true"
android:singleLine="true"
android:textColorHint="#DDDDDD"
android:textSize="16sp" />

<TextView
android:id="@+id/tv_password"
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/et_password"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:text="@string/password"
android:textColor="#353535"
android:textSize="16sp" />
</RelativeLayout>

<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="40dp"
android:background="@drawable/btn_enable_green"
android:enabled="false"
android:paddingBottom="7dp"
android:paddingTop="7dp"
android:text="登录"
android:textColor="@android:color/white"
android:textSize="18sp" />

<TextView
android:id="@+id/tv_wenti"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginTop="10dp"
android:text="登录遇到问题?"
android:textColor="#576B95"
android:textSize="14sp" />
</LinearLayout>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >

<Button
android:layout_margin="33dp"
android:padding="8dp"
android:background="#F0F0F0"
android:id="@+id/btn_qtlogin"
android:layout_width="80dp"
android:layout_height="33dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:text="注册"
android:textColor="#353535"
android:textSize="15sp" />
</RelativeLayout>

</LinearLayout>
布局文件后面再做详解,对应的视图代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
仅仅是显示,具体逻辑后面一步步实现。
仍然是回到闪屏的逻辑处理。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);

int RunCount = Utils.getIntValue(this, "RUN_COUNT");
if (RunCount == 0) {
// TODO 第一次使用,引导页面
} else {
Utils.putIntValue(this, "RUN_COUNT", RunCount++);
}
Boolean isLogin = Utils.getBooleanValue(SplashActivity.this, Constants.LoginState);
if (isLogin) {
// Intent intent = new Intent(this, UpdateService.class);
// startService(intent);
getLogin();
} else {
mHandler.sendEmptyMessage(0);
}
}
首先获取运行次数,如果是首次运行则加载引导页面,这里暂不处理。
再获取下登录状态,如果是已登录状态,则调用getLogin:
private void getLogin() {
String name = Utils.getValue(this, Constants.User_ID);
String pwd = Utils.getValue(this, Constants.PWD);
if (TextUtils.isEmpty(name)==false && TextUtils.isEmpty(name)==false)
getChatService(name, pwd);
else {
Utils.RemoveValue(SplashActivity.this, Constants.LoginState);
mHandler.sendEmptyMessageDelayed(0, 600);
}
}
读取账号和密码,如果都不为空则调用getChatService登录:
private void getChatService(final String userName, final String password) {
EMChatManager.getInstance().login(userName, password, new EMCallBack() {// 回调
@Override
public void onSuccess() {
runOnUiThread(new Runnable() {
public void run() {
// TODO 保存用户信息
Utils.putBooleanValue(SplashActivity.this, Constants.LoginState, true);
Utils.putValue(SplashActivity.this, Constants.User_ID, userName);
Utils.putValue(SplashActivity.this, Constants.PWD, password);

Log.e("Token", EMChatManager.getInstance().getAccessToken());
Log.d("main", "登陆聊天服务器成功!");
// 加载群组和会话
EMGroupManager.getInstance().loadAllGroups();
EMChatManager.getInstance().loadAllConversations();
mHandler.sendEmptyMessage(0);
}
});
}

@Override
public void onProgress(int progress, String status) {

}

@Override
public void onError(int code, String message) {
Log.d("main", "登陆聊天服务器失败!");
}
});
}
这里使用的EMChatManager是环信的一个SDK(http://www.easemob.com/),具体使用这里先不详解。
如果登录成功则置位登录状态的标志,并保持账号和密码,加载群组信息和聊天信息,并发送线程消息通知。
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
Boolean isLogin = Utils.getBooleanValue(SplashActivity.this, Constants.LoginState);
Intent intent = new Intent();
if (isLogin) {
intent.setClass(SplashActivity.this, MainActivity.class);
} else {
intent.setClass(SplashActivity.this, LoginActivity.class);
}
startActivity(intent);
overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
finish();
}
};
消息处理函数通过判断配置文件中的登录状态是否置位来检查是否登录成功,如果未登录则显示登录界面,已登录则加载主界面。
overridePendingTransition是一个页面切换的动画效果。

0 0