android 설정 - Android KitKat 4.4 행 아웃에서 SMS 보내기 의도를 처리 할 수 없음




2 Answers

다음을 수행하여 문제를 해결하는 코드를 첨부했습니다.

  • OS 버전 확인
  • 오래된 버전 (KitKat 이전)의 경우 이전 방법을 사용하십시오
  • 새 API 인 경우 기본 SMS 패키지를 확인하십시오. 있는 경우 패키지로 설정하고, 그렇지 않으면 사용자가 공유 앱을 선택하게하십시오.

다음은 코드입니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) //At least KitKat
    {
        String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(activity); //Need to change the build to API 19

        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_TEXT, smsText);

        if (defaultSmsPackageName != null)//Can be null in case that there is no default, then the user would be able to choose any app that support this intent.
        {
            sendIntent.setPackage(defaultSmsPackageName);
        }
        activity.startActivity(sendIntent);

    }
    else //For early versions, do what worked for you before.
    {
        Intent sendIntent = new Intent(Intent.ACTION_VIEW);
        sendIntent.setData(Uri.parse("sms:"));
        sendIntent.putExtra("sms_body", smsText);
        activity.startActivity(sendIntent);
    }
안드로이드 기본

Android 4.3 (Jelly Bean)이 4.4 (KitKat) 이후 작동을 멈출 때까지 완벽하게 작동하는 SMS를 보내는 코드

나는 사용자를 위해 문자 메시지를 준비하는 중일 뿐이며 보낼 번호를 선택해야합니다.

내가 사용한 코드는 다음과 같습니다.

Intent sendIntent = new Intent(Intent.ACTION_VIEW);         
    sendIntent.setData(Uri.parse("sms:"));
    sendIntent.putExtra("sms_body", smsText);

    activity.startActivity(sendIntent);

작업이 중단 된 후 ACTION_SENDACTION_SENDTO 모두 작동하지 않았고 sendIntent.setType("vnd.android-dir/mms-sms"); 도 시도했습니다 sendIntent.setType("vnd.android-dir/mms-sms"); , 다시 아무것도 작동하지 않았다.

내가 대답 1대답 2 에서 여러 답변을 찾았지만, 두 가지 대답은 내가 가진 요구 사항을 다루는되지 않습니다.

내가 무엇을하고 싶은지 :

  • 보내기 의도를 제공하는 모든 앱이 아닌 SMS 앱으로 만 SMS 보내기
  • 사용자를위한 텍스트 준비
  • 사용자가 메시지를 보낼 전화 번호를 선택하도록합니다.

중재자의 경우 : 질문이 중복 된 질문이 아니기 때문에 똑같은 질문을하지 않습니다. 여기에 전화 번호가없는 문자를 보내야하며 질문과 답변 중 아무 것도 응답하지 않습니다.




이것은 모든 안드로이드 버전 및 모든 SMS 앱 (행 아웃 포함)에서 작동해야합니다.

public static boolean sendSms(Context context, String text, String number) {
    return sendSms(context, text, Collections.singletonList(number));
}

public static boolean sendSms(Context context, String text, List<String> numbers) {

    String numbersStr = TextUtils.join(",", numbers);

    Uri uri = Uri.parse("sms:" + numbersStr);

    Intent intent = new Intent();
    intent.setData(uri);
    intent.putExtra(Intent.EXTRA_TEXT, text);
    intent.putExtra("sms_body", text);
    intent.putExtra("address", numbersStr);

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        intent.setAction(Intent.ACTION_SENDTO);
        String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(context);
        if(defaultSmsPackageName != null) {
            intent.setPackage(defaultSmsPackageName);
        }
    } else {
        intent.setAction(Intent.ACTION_VIEW);
        intent.setType("vnd.android-dir/mms-sms");
    }

    try {
        context.startActivity(intent);
    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
        return false;
    }

    return true;
}



Related