마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

앱실행후 자동으로 종료 되게 하는 방법이 어떤게 있을가요 ?

0 추천

SMS을 전송받으면 그 내용과 발신자정보 발신시간을 SmS브로드캐스트를 사용하여 긁어온후 제가 만든어플의 

내용란에 들어가게 되고 그 내용을 지정된 Email로 자동으로 전송되는 어플을 개발중입니다. 거의 다 완성되어

자동으로 메일이 전송되긴 합니다만, 문제가 하나 생겼습니다 ㅠㅠ 생각지도 못했던 부분이라..ㅠㅠ

 

위와 같이 SMS가 스마트폰으로 전송이 되면 제가 만든 어플이 바로 실행됩니다. 그리고 문제는 저기서 홈키를 누르든 

Back키(스마트폰자체의)를 눌러서 저 화면을 벗어나야 이 다음SMS가 왓을시 Email이 전송이 됩니다. 저화면상에서 다시 SMS가 올경우는 

SMS내용과 발신정보는 Message란에 긁어와지는데 Email전송이 먹통이 됩니다. 그 이유를 알고싶고, 그리고 

Email이 발송되어지면 Message Sent라는 토스트가 뜨는데 그 이후에 저 앱을 백그라운드로 빼고 화면을 홈이나 하고있던작업으로

자동으로 돌아가게 하고싶습니다. 즉 어플이 종료되게끔 하고싶습니다. 아니면 처음부터 앱을 백그라운드로 돌리고 싶습니다. 어떻게 해야할까요..ㅠㅠ 

안드로이드 스튜디오가 처음이고 JAVA또한 처음이라 쉽지않네요 ㅠㅠ 많이 도와주세요 아래에 코딩 Main코딩 첨부하겠습니다 ㅠㅠ

package com.example.kwak.emailsendtest;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;

public class MainActivity extends AppCompatActivity implements View.OnClickListener  {
    //Declaring EditText



    private TextView emailTextView;
    private EditText editTextSubject;
    private TextView messageTextView;
    //Send button
    private Button buttonSend;
    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    private GoogleApiClient client;

    @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 = emailTextView.getText().toString().trim();
        String subject = editTextSubject.getText().toString().trim();
        String message = messageTextView.getText().toString().trim();

        sendEmail();

    }

    /**
     * 이 액티비티가 SINGLE_TOP 플래그로 되어 있으면 이 메소드로 인텐트가 전달됩니다.
     */
    protected void onNewIntent(Intent intent) {
        // 전달된 인텐트를 처리합니다.
        processIntent(intent);

        super.onNewIntent(intent);
    }

    /**
     * 전달된 인텐트를 처리합니다.
     *
     * @param intent
     */
    private void processIntent(Intent intent) {

        if (intent != null) {
            // 발신 번호
            String sender = intent.getStringExtra("sender");
            // 수신 내용
            String contents = intent.getStringExtra("contents");

            // 시간
            String receivedDate = intent.getStringExtra("receivedDate");

            emailTextView = (TextView) findViewById(R.id.emailTextView);
            editTextSubject = (EditText) findViewById(R.id.editTextSubject);
            messageTextView = (TextView) findViewById(R.id.messageTextView);

            if (sender != null) {
                messageTextView.setText(sender + "에서 문자수신\n" + "[" + receivedDate + "] \n"  + contents);

            }
        }


        buttonSend = (Button) findViewById(R.id.buttonSend);

        //Adding click listener
        buttonSend.setOnClickListener(this);
    }





    private void sendEmail() {
        //Getting content for email
        String email = emailTextView.getText().toString().trim();
        String subject = editTextSubject.getText().toString().trim();
        String message = messageTextView.getText().toString().trim();

        //Creating SendMail object
        SendMail sm = new SendMail(this, email, subject, message);

        //Executing sendmail to send email
        sm.execute();
    }

    @Override
    public void onClick(View v) {
        sendEmail();
    }



}

 

 

 

코드 끝부분에 onClick(View v) sendEmail부분은 

처음에 클릭해서 전송시켰다가 자동으로 전송을 위해 onCreate 안에 sendEmail 포함시켜서 수동 자동 둘다 되게 해놓은거입니다 ㅎ 

두폴이 (180 포인트) 님이 2016년 8월 8일 질문
두폴이님이 2016년 8월 8일 수정

1개의 답변

0 추천
Activity가 완전히 종료되지 않은 상태에서 해당 Activity를 Intent를 통해 어딘가에서 호출을 하게 되면 onCreate가 호출되지 않고 onNewIntent가 호출됩니다.

요구하시는 부분이 화면이 떠있는 상태에서 SMS가 왔을때에도 아래에 있는 sendEmail 함수를 타야 하는게 맞나요?

아마 BroadcastReceiver이벤트를 받는 부분에서 위에 있는 MainActivity를 호출 하도록 되어 있을거 같은데 화면이 떠있는 상태에서도 onCreate에 정의해놓은대로 동작하려면 onNewIntent에서도 똑같이 sendEmail함수를 호출해야 맞을거 같습니다.

그리고 Activity 종료 할때는 finish()함수를 호출하시면 됩니다.
Development Guy (70,570 포인트) 님이 2016년 8월 9일 답변
...