인 텐트로 SMS 응용 프로그램 시작


144

의도에 대한 질문이 있습니다 ... SMS 앱을 시작하려고합니다 ...

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setType("vnd.android-dir/mms-sms");
int flags = Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP |
    Intent.FLAG_ACTIVITY_CLEAR_TOP;
intent.setFlags(flags);
intent.setData(Uri.parse("content://sms/inbox"));
context.startActivity(intent);

그래서, 당신은 내 의도에 너무 많은 것들을 넣었 음을 알 수 있지만, 내가 할 수있는 방법을 모르기 때문입니다 ... 감사합니다.


1
Checkout gist.github.com/gelldur/9c199654c91b13478979 SMS 앱으로 공유 가능
— Dawid Drozd

답변:


238

SMS 활동을 시작하려면 다음과 같이하십시오.

Intent sendIntent = new Intent(Intent.ACTION_VIEW);         
sendIntent.setData(Uri.parse("sms:"));

당신은 당신의 자신의 메시지를 채울 여분을 추가 할 수 있습니다

sendIntent.putExtra("sms_body", x); 

그런 다음 의도로 Activity를 시작하십시오.

startActivity(sendIntent);

나는 시도했지만, 당신이 제공 한 것을 정확하게 쓸 때, 일식 콘솔 반환 (컴파일 할 때) "No Launcher activity found!"
— Olivier69

좋아, 매니페스트의 인 텐트 필터에 다음 속성이있는 활동이 있습니까? <action android : name = "android.intent.action.MAIN"/> <category android : name = "android.intent.category.LAUNCHER"/>
— jqpubliq

실제로 출시는 appwidgetactivity에서 온 것입니다. Perh'aps coms here, 나는 당신이 매니페스트에서 한 일을 넣었지만 아무 일도 일어나지 않습니다 ... 나는 다른 기능으로 내 버튼을 테스트했습니다.
— Olivier69

22
'받는 사람'상자에 전화 번호를 자동으로 포함하려면 setData 코드 줄을 sendIntent.setData(Uri.parse("sms:" + phoneNumber));(jqpubliq 및 jaydeepw에게 감사)로 변경하십시오.
— tmr

2
사용자가 Intent ti sms를 통해 내 앱에서 SMS를 보낼 때 SMS가 전송되었는지 확인해야합니까?
— 사용자

139
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address", "12125551212");
smsIntent.putExtra("sms_body","Body of Message");
startActivity(smsIntent);

4
최고의 솔루션! 감사!
— Nick

20
이것은 안드로이드 4.4에서는 작동하지 않으며 아마도 "vnd.android-dir / mms-sms"는 더 이상 지원되지 않습니다
— Max Ch

2
Android 4.4.2에서 방금 테스트되었으며 작동합니다. 그 발표에 저를 연결시켜 주시겠습니까? @MaxCh
— theknut

3
내 경우처럼 전화 번호가 추가되지 않은 경우 다음을 추가하십시오.intent.setData(Uri.parse("smsto:" + phoneNumber));
— Utopia

4
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) }
— Nguyen Minh Binh

49

Android 버전이 Kitkat 이상인 경우 사용자는 기본 SMS 애플리케이션을 변경할 수 있습니다. 이 방법은 기본 SMS 앱을 가져오고 기본 SMS 앱을 시작합니다.

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

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

         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);
         }
         startActivity(sendIntent);

      }
      else // For early versions, do what worked for you before.
      {
         Intent smsIntent = new Intent(android.content.Intent.ACTION_VIEW);
         smsIntent.setType("vnd.android-dir/mms-sms");
         smsIntent.putExtra("address","phoneNumber");         
         smsIntent.putExtra("sms_body","message");
         startActivity(smsIntent);
      }
   }

2
KitKat 버전을 사용하고 있습니다. 수신자 필드에 수신자 번호를 설정하고 싶습니다. 어떻게 설정할 수 있습니까?
— Karthikeyan Ve

3
@KarthikeyanVe 시도해보십시오? 의도 sendIntent = 새로운 의도 (Intent.ACTION_SENDTO); sendIntent.setData (Uri.parse ( "smsto : phonenumber"));
— android_developer 11

나는 노력했다. 잘 작동합니다. 그러나 메시지 앱에서 뒤로 버튼을 클릭하면 앱도 닫힙니다. 메시지 앱에서 다시 누르면 내가 떠난 곳으로 다시 앱으로 돌아 가야합니다.
— Karthikeyan Ve

2
좋은 대답입니다. 기본 SMS 앱으로 직접 이동하려면 매력처럼 작동합니다. 선택자를 원하면 여기에 다른 답변을 참조하십시오.
— Nemanja Kovacevic

1
내가 메시지에서 돌아 왔을 때 왜 앱이
— 닫히는가

31
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

그게 당신이 필요한 전부입니다.


코드가 Android 4.2.2에서 작동하면 SMS에 대한 목록보기가 열립니다. 그게 내가 필요한거야!
— VISHAL VIRADIA

22

다른 활동에서 SMS 작성 활동을 시작하고 전화 번호와 SMS 텍스트도 전달해야하는 경우이 코드를 사용하십시오.

Uri sms_uri = Uri.parse("smsto:+92xxxxxxxx"); 
Intent sms_intent = new Intent(Intent.ACTION_SENDTO, sms_uri); 
sms_intent.putExtra("sms_body", "Good Morning ! how r U ?"); 
startActivity(sms_intent); 

참고 : 여기 sms_body와는 smsto:그래서 여기주의, 더 SMS의 작성 활동에서 텍스트와 전화를 인식하지위한 키입니다.


응용 프로그램은 의도 메시지를 시작하거나 내가 다시 누를 때 키 응용 프로그램이 닫힐 때 가까운
— 무하마드 Younas

이 코드 다음 수행이 열려 쓰기 SMS 기능, 타격 뒤로 버튼 후 응용 프로그램을 닫습니다 다음 epecially 공공 무효 BackPressed () {}이 같은 기능의 코드에서 일부 문제가 될 경우 실행할 때 먼저 말해
— PIR을 Fahim Shah

내가 BackPresed Functionn을 덮어 쓰지 않았다
— 무하마드 Younas에게

17

다음은 SMS를 보내야하는 전화 번호로 미리 채워진 SMS 활동을 여는 코드입니다. 이것은 장치뿐만 아니라 에뮬레이터에서도 잘 작동합니다 .

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.setData(Uri.parse("sms:" + phoneNumber));
startActivity(smsIntent);

1
이 메시지에 사진을 어떻게 첨부 할 수 있습니까?
— unresolved_external

프레임 워크 코드를 보면 setType ()은 데이터를 null로 만들고 setData ()는 형식을 null로 만듭니다. 그렇다면이 유형은 어떻게 유지됩니까?
— AndroidGuy

SMS에서 텍스트의 글꼴을 변경하는 방법
— jyomin

5

사용하다

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");

1
이것은 에뮬레이터와 같은 주식 앱에서 작동하지만 Galaxy S3에서는 작동하지 않을 수 있습니다.
— G. Lombard

1
@ G.Lombard Lombard 예이 코드는 s3에서 작동하지 않습니다. s3에 대한 솔루션?
— Vivek Kumar Srivastava

4

나는 사용한다:

Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.putExtra("sms_body", "text");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);

4
Intent eventIntentMessage =getPackageManager()
 .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext));
startActivity(eventIntentMessage);

SDK_INT> = 19 (이 API가 사용 가능한 곳)의 경우 작동합니다. 실제로 메시지 목록이 열려있는 SMS 앱을 원하는 경우 누가 내 넥서스 6의 유일한 작업 솔루션입니다
— lujop

3
try {
    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setData(Uri.parse("smsto:" + Uri.encode(number)));
    smsIntent.putExtra("address", number);
    smsIntent.putExtra("sms_body", message);

    PackageManager pm = activity.getPackageManager();
    List<ResolveInfo> resInfo = pm.queryIntentActivities(smsIntent, 0);

    for (int i = 0; i < resInfo.size(); i++) {
        ResolveInfo ri = resInfo.get(i);
        String packageName = ri.activityInfo.packageName;

        if (packageName.contains("sms")) {
            //Log.d("TAG", packageName + " : " + ri.activityInfo.name);
            smsIntent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
        }
    }
    activity.startActivity(smsIntent);
} catch (Exception e) {
    // Handle Error
}

가장 좋은 방법입니다.


이 코드 만 나를 위해 작동합니다 ...하지만 여러 SMS 응용 프로그램의 선택을 피하는 방법 ... 만 기본값이 시작됩니다.
— Mahbubur Rahman Khan

3

기본 SMS 앱을 열고 다음과 같이 세부 정보를 전달할 수 있습니다.
참고 : 많은 숫자로 보내려면 각 숫자를 ";"로 구분하십시오. 내부 문자열

String mblNumVar = "9876543210;9123456789";
Intent smsMsgAppVar = new Intent(Intent.ACTION_VIEW);
smsMsgAppVar.setData(Uri.parse("sms:" +  mblNumVar));
smsMsgAppVar.putExtra("sms_body", "Hello Msg Tst Txt");
startActivity(smsMsgAppVar);

| 또는 | 이 기능을 사용하십시오 :

void openSmsMsgAppFnc(String mblNumVar, String smsMsgVar)
{
    Intent smsMsgAppVar = new Intent(Intent.ACTION_VIEW);
    smsMsgAppVar.setData(Uri.parse("sms:" +  mblNumVar));
    smsMsgAppVar.putExtra("sms_body", smsMsgVar);
    startActivity(smsMsgAppVar); 
}

1. 행 아웃과 2. 기본 메시지 앱의 두 가지 옵션이 표시됩니다. Android 메시지 앱을 강제로 열고 싶습니다. 어떻게 보관할 수 있습니까?
— Milind Mevada

3

kotlin 에서는 다음과 같이 쉽게 구현할 수 있습니다.

/**
 * If android version is Kitkat or above, users can change default sms application.
 * This method will get default sms app and start default sms app.
 */
private fun openSMS() {
    val message = "message here"
    val phone = "255754......." //255 Tanzania code.

    val uri = Uri.parse("smsto:+$phone")
    val intent = Intent(Intent.ACTION_SENDTO, uri)

    with(intent) {
        putExtra("address", "+$phone")
        putExtra("sms_body", message)
    }

    when {
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT -> {
            //Getting the default sms app.
            val defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(context)

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

            startActivity(intent)
        }
        else -> startActivity(intent)
    }
}

이것은 @mustafasevgi의 수정 된 답변입니다.


2
Intent sendIntent = new Intent(Intent.ACTION_SEND); 
//CHANGE YOUR MESSAGING ACTIVITY HERE IF REQUIRED 
sendIntent.setClassName("com.android.mms", "com.android.mms.ui.ComposeMessageActivity");
sendIntent.putExtra("sms_body",msgbody); 
sendIntent.putExtra("address",phonenumber);
//FOR MMS
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/mms.png"));
sendIntent.setType("image/png");
startActivity(sendIntent);

2

기본 SMS 앱에서 작동하는 가장 좋은 코드는 다음과 같습니다.

Uri SMS_URI = Uri.parse("smsto:+92324502****"); //Replace the phone number
Intent sms = new Intent(Intent.ACTION_VIEW,SMS_URI);    
sms.putExtra("sms_body","This is test message"); //Replace the message witha a vairable 
startActivity(sms);

1

아래 코드는 안드로이드 6.0에서 작동합니다.
제공된 특정 문자열과 관련된 대화로 기본 메시징 응용 프로그램에서 검색 활동을 엽니 다.

Intent smsIntent = new Intent(Intent.ACTION_MAIN);
        smsIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        smsIntent.setClassName("com.android.mms", "com.android.mms.ui.SearchActivity");
        smsIntent.putExtra("intent_extra_data_key", "string_to_search_for");
        startActivity(smsIntent);  

인 텐트로 검색 활동을 시작할 수 있습니다. 기본 메시징 응용 프로그램의 검색 활동이 열립니다. 이제 검색 활동에서 특정 대화 목록을 표시하려면 키를 추가하여 검색 문자열을 추가 문자열로 제공 할 수 있습니다.

"intent_extra_data_key"

이 클래스의 onCreate에 표시된 것처럼

String searchStringParameter = getIntent().getStringExtra(SearchManager.QUERY);
    if (searchStringParameter == null) {
        searchStringParameter = getIntent().getStringExtra("intent_extra_data_key" /*SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA*/);
    }
    final String searchString = searchStringParameter != null ? searchStringParameter.trim() : searchStringParameter;

또한 SMS의 SENDER_ADDRESS를 문자열 추가로 전달하면 해당 발신자 주소와의 모든 대화가 나열됩니다.

자세한 내용은 com.android.mms.ui.SearchActivity 를 확인 하십시오.

이 답변을 확인할 수도 있습니다


0

에뮬레이터 에서이 작업

Intent i = new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", number, null));
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.putExtra("sms_body", remindingReason);

                startActivity(i);

0

SMS 의도 :

Intent intent = new Intent("android.intent.action.VIEW");
        /** creates an sms uri */
        Uri data = Uri.parse("sms:");
        intent.setData(data);

0

SMS 작성 :

Uri smsUri = Uri.parse("tel:" + to);
Intent intent = new Intent(Intent.ACTION_VIEW, smsUri);
intent.putExtra("address", to);
intent.putExtra("sms_body", message);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

0

당신은 이것을 사용할 수 있습니다, 둘 다 4.4 이상의 안드로이드에서 잘 작동합니다

    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setType("vnd.android-dir/mms-sms");
    smsIntent.putExtra("address","9212107320");
    smsIntent.putExtra("sms_body","Body of Message");
    startActivity(smsIntent);

또는

    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.putExtra("sms_body","Body of Message");
    smsIntent.setData(Uri.parse("sms:9212107320"));
    startActivity(smsIntent);

0

다음 코드 스 니펫을 사용하여 목표를 달성 할 수 있습니다.

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+model.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.putExtra("sms_body","Hello this is dummy text");
startActivity(smsIntent);

텍스트를 원하지 않으면 sms_body 키를 제거하십시오.

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.