백그라운드에서 대기하여 문자롤 수신 하였을 때 엑티비티 실행

 

 

1.BroadCastReceiver.java 생성

 

File -> New -> other -> broadcast receiver

 

더보기

-MainActivity.java-

package com.example.my14_smsservice;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        checkDangerousPermissions();
    }

    private void checkDangerousPermissions() {
        String[] permissions = {
                Manifest.permission.RECEIVE_SMS

        };

        int permissionCheck = PackageManager.PERMISSION_GRANTED;
        for (int i = 0; i < permissions.length; i++) {
            permissionCheck = ContextCompat.checkSelfPermission(this, permissions[i]);
            if (permissionCheck == PackageManager.PERMISSION_DENIED) {
                break;
            }
        }

        if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "권한 있음", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "권한 없음", Toast.LENGTH_LONG).show();

            if (ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0])) {
                Toast.makeText(this, "권한 설명 필요함.", Toast.LENGTH_LONG).show();
            } else {
                ActivityCompat.requestPermissions(this, permissions, 1);
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == 1) {
            for (int i = 0; i < permissions.length; i++) {
                if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this, permissions[i] + " 권한이 승인됨.", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(this, permissions[i] + " 권한이 승인되지 않음.", Toast.LENGTH_LONG).show();
                }
            }
        }
    }





}

-snsDisplay.java-

package com.example.my14_smsservice;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class SmsDisplayActivity extends AppCompatActivity {

    Button btnTitle,btnClose;
    TextView tvMsg;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sms_display);

        tvMsg = findViewById(R.id.tvMsg);
        btnTitle = findViewById(R.id.btnTitle);
        btnClose = findViewById(R.id.btnClose);

        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        Intent display = getIntent();
        processIntent(display);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        processIntent(intent);
    }

    private void processIntent(Intent display) {
        String sender = display.getStringExtra("sender");
        String receivedDate = display.getStringExtra("receivedDate");
        String contents = display.getStringExtra("contents");

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

-MyReveiver.java-

package com.example.my14_smsservice;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MyReceiver extends BroadcastReceiver {
    private static final String TAG = "MyReceiver";
    public SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive: 호출됨");

        Bundle bundle = intent.getExtras();
        SmsMessage[] messages = parseSmsMessage(bundle);

        if(messages != null && messages.length>0){
            Log.d(TAG, "SMS를 수신하였습니다");

            String sender = messages[0].getOriginatingAddress();    //보낸사람
            Log.d(TAG, "sender : "+sender);

            Date receivedDate = new Date(messages[0].getTimestampMillis()); //받은 날짜
            Log.d(TAG, "receivedDate : "+receivedDate);

            String contents = messages[0].getMessageBody(); //내용
            Log.d(TAG, "contents : "+contents);

            Intent display = new Intent(context,SmsDisplayActivity.class);

            display.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_SINGLE_TOP);
            /*
            * NWE TASK : 새창 띄움
            * CLEAR TOP :
            * SINGLE TOP : 똑같은 창을 띄우지 말고 기존 창을 써라
            * */

            display.putExtra("sender",sender);
            display.putExtra("receivedDate",dateFormat.format(receivedDate));
            display.putExtra("contents",contents);
            context.startActivity(display);
        }
    }

    private SmsMessage[] parseSmsMessage(Bundle bundle) {
        Object[] objs = (Object[]) bundle.get("pdus");  //pdu:메세지 1,2,etc.. 가르킴 최신메세지는 0번임.
        SmsMessage[] messages = new SmsMessage[objs.length];

        for(int i=0;i<objs.length;i++){
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                String format = bundle.getString("format");
                messages[i] = SmsMessage.createFromPdu((byte[]) objs[i],format);
            }else{
                messages[i] = SmsMessage.createFromPdu((byte[]) objs[i]);
            }
        }

        return messages;
    }
}

'For developer > Android' 카테고리의 다른 글

(Android)my16_progress  (0) 2020.05.27
(Android)my15_touchevent  (0) 2020.05.27
(Android)my13_service  (0) 2020.05.21
(Android)my11_dialog_대화상자  (0) 2020.05.21
(Android)my10_intentresult  (0) 2020.05.21

+ Recent posts