import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.telephony.TelephonyManager; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast;
import java.io.IOException; import java.util.ArrayList; import java.util.List;
import okhttp3.OkHttpClient;
import static com.tistory.link2me.okhttplogin.OKHttpAPICall.LoginBody;
public class Login extends AppCompatActivity { String getDeviceID; // 스마트기기의 장치 고유값 EditText etId; EditText etPw;
String loginID; String loginPW; CheckBox autologin; Boolean autologinchk; String idx; public SharedPreferences settings;
private OkHttpClient client; String response;
// 멀티 퍼미션 지정 private String[] permissions = { Manifest.permission.READ_PHONE_STATE, Manifest.permission.CALL_PHONE, // 전화걸기 및 관리 Manifest.permission.WRITE_CONTACTS, // 주소록 액세스 권한 Manifest.permission.WRITE_EXTERNAL_STORAGE, // 기기, 사진, 미디어, 파일 엑세스 권한 Manifest.permission.RECEIVE_SMS, // 문자 수신 Manifest.permission.CAMERA }; private static final int MULTIPLE_PERMISSIONS = 101;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login);
if (Build.VERSION.SDK_INT >= 23) { // 안드로이드 6.0 이상일 경우 퍼미션 체크 checkPermissions(); }
// 네트워크 연결상태 체크 if(NetworkConnection() == false){ NotConnected_showAlert(); }
etId = (EditText) findViewById(R.id.login_id_edit); etPw = (EditText) findViewById(R.id.login_pw_edit); autologin = (CheckBox) findViewById(R.id.autologinchk);
settings = getSharedPreferences("settings", Activity.MODE_PRIVATE); autologinchk = settings.getBoolean("autologin", false); if (autologinchk) { etId.setText(settings.getString("loginID", "")); etPw.setText(settings.getString("loginPW", "")); autologin.setChecked(true); }
if(!settings.getString("loginID", "").equals("")) etPw.requestFocus();
Button submit = (Button) findViewById(R.id.login_btn); submit.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View view) { loginID = etId.getText().toString().trim(); loginPW = etPw.getText().toString().trim();
if(loginID != null && !loginID.isEmpty() && loginPW != null && !loginPW.isEmpty()){ String url = Value.IPADDRESS + "/loginChk.php"; // 단말기의 ID 정보를 얻기 위해서는 READ_PHONE_STATE 권한이 필요 TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (mTelephony.getDeviceId() != null){ getDeviceID = mTelephony.getDeviceId(); // 스마트폰 기기 정보 } else { getDeviceID = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID); } new AsyncLogin().execute(url,loginID, loginPW,getDeviceID); } } }); }
private class AsyncLogin extends AsyncTask<String, Void, String> { ProgressDialog pdLoading = new ProgressDialog(Login.this);
@Override protected void onPreExecute() { super.onPreExecute(); //this method will be running on UI thread pdLoading.setMessage("\tValidating user..."); pdLoading.setCancelable(false); pdLoading.show(); }
@Override protected String doInBackground(String... params) { client = new OkHttpClient(); try { response = OKHttpAPICall.POST(client, params[0], LoginBody(params[1], params[2],params[3]));
Log.d("Response", response); return response; } catch (IOException e) { e.printStackTrace(); } return null; }
protected void onPostExecute(String result){ pdLoading.dismiss(); if(Integer.parseInt(result) > 0){ // 로그인 정보 일치 idx = result; Toast.makeText(getApplicationContext(),"로그인 성공", Toast.LENGTH_SHORT).show(); startActivity(new Intent(getApplication(), MainActivity.class)); finish(); // 현재 Activity 를 없애줌
} else if(result.equalsIgnoreCase("-1")){ // 등록된 단말기와 불일치 deviceDismatch_showAlert(); } else if (result.equalsIgnoreCase("0")) { showAlert(); } else { Toast.makeText(getApplicationContext(), "서버로부터 정보가 잘못 전송되었습니다", Toast.LENGTH_SHORT).show(); }
}
}
public void onStop(){ // 어플리케이션이 화면에서 사라질때 super.onStop(); // 자동 로그인이 체크되어 있고, 로그인에 성공했으면 폰에 자동로그인 정보 저장 if (autologin.isChecked()) { settings = getSharedPreferences("settings",Activity.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit();
editor.putString("loginID", loginID); editor.putString("loginPW", loginPW); editor.putBoolean("autologin", true); editor.putString("idx", idx);
editor.commit(); } else { // 자동 로그인 체크가 해제되면 폰에 저장된 정보 모두 삭제 settings = getSharedPreferences("settings", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.clear(); // 모든 정보 삭제 editor.commit(); }
}
public void deviceDismatch_showAlert(){ AlertDialog.Builder builder = new AlertDialog.Builder(Login.this); builder.setTitle("등록단말 불일치"); builder.setMessage("최초 등록된 단말기가 아닙니다.\n" + "관리자에게 문의하여 단말기 변경신청을 하시기 바랍니다.") .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); AlertDialog alert = builder.create(); alert.show(); }
public void showAlert(){ AlertDialog.Builder builder = new AlertDialog.Builder(Login.this); builder.setTitle("로그인 에러"); builder.setMessage("로그인 정보가 일치하지 않습니다.") .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); AlertDialog alert = builder.create(); alert.show(); }
private void NotConnected_showAlert() { AlertDialog.Builder builder = new AlertDialog.Builder(Login.this); builder.setTitle("네트워크 연결 오류"); builder.setMessage("사용 가능한 무선네트워크가 없습니다.\n" + "먼저 무선네트워크 연결상태를 확인해 주세요.") .setCancelable(false) .setPositiveButton("확인", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { finish(); // exit //application 프로세스를 강제 종료 android.os.Process.killProcess(android.os.Process.myPid() ); } }); AlertDialog alert = builder.create(); alert.show();
}
private boolean NetworkConnection() { int[] networkTypes = {ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_WIFI}; try { ConnectivityManager manager = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE); for (int networkType : networkTypes) { NetworkInfo activeNetwork = manager.getActiveNetworkInfo(); if(activeNetwork != null && activeNetwork.getType() == networkType){ return true; } } } catch (Exception e) { return false; } return false; }
private boolean checkPermissions() { int result; List<String> permissionList = new ArrayList<>(); for (String pm : permissions) { result = ContextCompat.checkSelfPermission(this, pm); if (result != PackageManager.PERMISSION_GRANTED) { permissionList.add(pm); } } if (!permissionList.isEmpty()) { ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), MULTIPLE_PERMISSIONS); return false; } return true; }
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MULTIPLE_PERMISSIONS: { if (grantResults.length > 0) { for (int i = 0; i < permissions.length; i++) { if (permissions[i].equals(this.permissions[i])) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { showToast_PermissionDeny(); } } } } else { showToast_PermissionDeny(); } return; } }
}
private void showToast_PermissionDeny() { Toast.makeText(this, "권한 요청에 동의 해주셔야 이용 가능합니다. 설정에서 권한 허용 하시기 바랍니다.", Toast.LENGTH_SHORT).show(); finish(); }
} |