欢迎(登录)界面
欢迎界面在等待与设备建立连接的过程中显示,当HTTP通信连接成功后,进入主界面。
代码
activity_welcome.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.****.**.WelcomeActivity">
<ImageView
android:id="@+id/imageViewWelcome"
android:layout_width="312dp"
android:layout_height="377dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="0dp"
android:contentDescription="@string/welcome"
android:scaleType="centerInside"
android:visibility="visible"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/welcome"
android:layout_marginBottom="0dp"
app:layout_constraintBottom_toTopOf="@+id/textView" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="8dp"
android:text="@string/connecting"
android:textSize="24sp"
app:layout_constraintBottom_toTopOf="@+id/progressBar"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="48dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="32dp" />
</android.support.constraint.ConstraintLayout>
WelcomeActivity.java
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.WindowManager;
import java.io.UnsupportedEncodingException;
import static android.os.SystemClock.sleep;
public class WelcomeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
// 保持屏幕常量
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
// 处理HTTP Response
HttpConnection.getInstance().setHandler(mHandlerWelcome);
// 去除标题栏
if (getSupportActionBar() != null){
getSupportActionBar().hide();
}
new Thread(new Runnable() {
@Override
public void run() {
// 此处运行耗时任务
try {
// 不断尝试连接
HttpConnection.getInstance().Add(Defines.REQUEST_GET, Defines.INTERFACE_CONNECT);
HttpConnection.getInstance().start();
sleep(1000);
String strRet = HttpConnection.getInstance().getCookie();
while (strRet == null || strRet.equals("")) {
HttpConnection.getInstance().Add(Defines.REQUEST_GET, Defines.INTERFACE_CONNECT);
sleep(1000);
strRet = HttpConnection.getInstance().getCookie();
}
}catch (Exception e) {
e.printStackTrace();
}
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// // 连接成功后跳转到主界面
// Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);
// startActivity(intent);
// WelcomeActivity.this.finish();
// }
// });
}
}).start();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
new AlertDialog.Builder(this).setTitle(getResources().getString(R.string.exit))
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击“确认”后的操作
System.exit(0);
}
})
.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击“返回”后的操作,这里不设置没有任何操作
}
}).show();
}
return false;
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//判断其他Activity启动本Activity时传递来的intent是否为空
if (intent != null) {
//获取intent中对应Tag的布尔值
boolean isExist = intent.getBooleanExtra("exist", false);
//如果为真则退出本Activity
if (isExist) {
this.finish();
System.exit(0);
}
}
}
public Handler mHandlerWelcome=new Handler() {
public void handleMessage(Message msg) {
String strRecv = msg.getData().getString("Body");
try {
if(strRecv != null) {
strRecv = new String(strRecv.getBytes("ISO-8859-1"), "UTF-8");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
switch (msg.what) {
case Defines.INTERFACE_CONNECT:
String strRet = HttpConnection.getInstance().getCookie();
if(strRet != null && !strRet.equals("")){
Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);
Bundle bundle = new Bundle();
bundle.putString("status", strRecv);
intent.putExtras(bundle);
startActivity(intent);
// WelcomeActivity.this.finish();
}
break;
default:
break;
}
}
};
}
说明
- 界面由一张图片、一段文字和一个圆形进度条组成;
- 后台开线程不断尝试连接设备,连接成功后,显示主界面,并将连接信息传递给主界面;
- 显示主界面后,并不finish欢迎Activity,用来和onNewIntent配合,实现完全退出(关闭所有Activity),参见这里;
后期补充
将欢迎Activity设置android:launchMode="singleTask",可以实现完全退出(关闭所有Activity),但是会带来新的问题:
APP打开后,通过Home键返回桌面,再次打开APP无法返回之前的Activity,会重新进入欢迎Activity
解决方法是,不将欢迎Activity设置成"singleTask",而是将下一个Activity(主界面)设置成"singleTask",参见
这里。同时将onNewIntent移至主界面,并打开语句WelcomeActivity.this.finish();