아마도 메일 보내는것이 네트워크에 연결해서 작업을 처리하는 것이다 보니 OnCreate() 에서 직접적으로 호출하면 안되는것 같습니다.
왜냐하면 앱이 실행되자 마자 네트워크에 연결해서 무슨 작업을 하게 되면 앱이 늦게 뜨거든요.
때문에 구글에서 액티비티가 처음 생성되자 마자 직접적으로 네트워크 호출을 하면 에러가 떨어지게 만들어놨다고 들었습니다.
저도 이것때문에 http 통신 처음에 할때 무지 삽질 했습니다...
방법은 AsyncTask로 스레드 만들어서 백그라운드로 처리하는 것입니다. 비동기나 스레드로 무엇을 처리한다는게 아주 귀찮은 방법이죠... 손이 많이 갑니다;;;
우선 AsyncTask 클래스를 하나 만들어야 합니다.
메인 액티비티 아래쯤에 이메일 전송을 처리하는 AsyncTask 클래스를 하나 만들어 줍니다.
private class EmailAsyncTask extends AsyncTask<String, Void, Boolean> {
// 비동기 작업 진행
@Override
protected Boolean doInBackground(String... params) {
//Getting content for email
String email = params[0];
String subject = params[1];
String message = params[2];
//Creating SendMail object
SendMail sm = new SendMail(this, email, subject, message);
//Executing sendmail to send email
sm.execute();
return true;
}
@Override
protected void onPostExecute(Boolean isCompleted) {
// 전송 완료 후 작업
}
}
그리고 OnCreate() 에 만든 AsyncTask를 호출합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
messageTextView = (TextView) findViewById(R.id.messageTextView);
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "SMS 수신 권한 있음.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "SMS 수신 권한 없음.", Toast.LENGTH_LONG).show();
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECEIVE_SMS)) {
Toast.makeText(this, "SMS 권한 설명 필요함.", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.RECEIVE_SMS},
1);
}
}
// 전달된 인텐트를 처리합니다.
Intent passedIntent = getIntent();
processIntent(passedIntent);
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
String email = editTextEmail.getText().toString().trim();
String subject = editTextSubject.getText().toString().trim();
String message = messageTextView.getText().toString().trim();
new EmailAsyncTask().execute(email, subject, message);
}