본문 바로가기
Project/안드로이드 프로젝트(HYPersonnalApp)

Android Studio, Java] 메세지 앱 인텐트로 띄우기

by 김마리님 2020. 11. 5.

이거로 너무 고생했어요 (ㅋㅋ) 너무 안 맞는 자료가 많아서.. 스택 오버플로우에서 한참을 헤멨었던 것 같아요.

Android 10.0버전 작동 확인했고, Min SDK(Api Level)은 21로 작업했습니다

 

    private void sendMMSIntent(String message) {
        Uri uri = Uri.parse("sms: " + phone);
        Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
        sendIntent.putExtra("subject", "MMS TEST");
        sendIntent.putExtra("sms_body", message);
        startActivity(sendIntent);
        finish();
        }

저같은 경우는 이 앱을 개발할 때 사용하는 직업의 근무형태와 조작능력을 고려해 (가끔 인터넷이 안된다고 하셔서)인터넷에 구애받지 않도록 만들고 싶어서 일부러 데이터베이스를 이용하지 않고, 조금 결합도를 늘리더라도 SharedPreference와 static 함수를 이용해서 했어요. 그래서 phone 변수의 경우 sharedpreference로, 메세지 값은 버튼을 누를때 stringbuilder을 통해 앞서 ViewHolder의 값을 static 변수에 넣도록 하여 그 값을 for문을 돌려 append 하는 방식을 택했습니다.

 

입력했을 때 총계가 0일 경우는 문자가 날아가지 못하게, intent로 이동하지 못하도록 return으로 바로 함수를 종료시킵니다.

 

(Listener 부분)

- SelectProductActivity. java

더보기
   private void setListener() {
        textViewNextButton.setOnClickListener(v -> {
            SharedPreferences sharedPreferences = SelectProductActivity.this.getSharedPreferences(SharedPreferenceUtil.SHARED_PREFERENCES_KEY, MODE_PRIVATE);

            StringBuilder sb = new StringBuilder();
            sb.append("안녕하세요 제품 판매자 입니다. \n");
            sb.append("이번 달 명세서입니다. \n");
            int productAllCost = 0;
            DebugLogUtil.logD(TAG, "textViewNextButton 클릭");
            for (int i = 0; i < productAllCostList.size(); i++) {
                if(productCount.get(i)!=0) {
                    sb.append(Constant.productList.get(i) + " " + productCount.get(i) + "개, " +productAllCostList.get(i)+"\n");
                    productAllCost += productAllCostList.get(i);
                }
            }

            if(productAllCost==0){
                Toast.makeText(this, "입력된 값이 없습니다", Toast.LENGTH_SHORT).show();
                sb.delete(0, sb.length());
                return;
            }
            sb.append("총 "+productAllCost+"원 입니다. \n");
            sb.append("계좌는 "+sharedPreferences.getString("bank","")+" "+sharedPreferences.getString("account","")+ " 입니다. \n");
            sb.append("감사합니다.");

            sendMMSIntent(sb.toString());
        });
    }

 

값을 넣는 부분에서는 값을 단순히 화살표로 조절하거나, 입력만 하는 방식이 아니라, 양 쪽 다 가능한 방식을 택했어요.

(값을 조정하는 Listener 부분)

- SelectProductViewHolder. java

더보기
    private void setListener() {

        //product1
        imageViewProductPlus.setOnClickListener(v -> {
            DebugLogUtil.logD(TAG, "textViewProduct1Plus 클릭");
            String[] stringProduct1OneCost = textViewProductOneCost.getText().toString().split("원");
            int product1OneCost = Integer.valueOf(stringProduct1OneCost[0]);
            productCount += 1;
            editTextProductCount.setText(productCount + "");
            textViewProductAllCost.setText((product1OneCost * productCount) + "원");
            if (productCount != 0) {
                SelectProductActivity.productCount.set(position, productCount);
                SelectProductActivity.productAllCostList.set(position, (product1OneCost * productCount));
            }
        });

        imageViewProductMinus.setOnClickListener(v -> {
            DebugLogUtil.logD(TAG, "textViewProduct1Minus 클릭");
            String[] stringProduct1OneCost = textViewProductOneCost.getText().toString().split("원");
            int product1OneCost = Integer.valueOf(stringProduct1OneCost[0]);
            if (productCount < 1) {
                productCount = 0;
            } else {
                productCount -= 1;
            }
            editTextProductCount.setText(productCount + "");
            textViewProductAllCost.setText((product1OneCost * productCount) + "원");
            if (productCount != 0) {
                SelectProductActivity.productCount.set(position, productCount);
                SelectProductActivity.productAllCostList.set(position, (product1OneCost * productCount));
            }
        });

        editTextProductCount.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (editTextProductCount.getText().toString().equals("")) {
                    productCount = 0;
                } else {
                    productCount = Integer.valueOf(editTextProductCount.getText().toString());
                }
                String[] stringProduct1OneCost = textViewProductOneCost.getText().toString().split("원");
                int product1OneCost = Integer.valueOf(stringProduct1OneCost[0]);
                textViewProductAllCost.setText((product1OneCost * productCount) + "원");
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }
반응형