인 텐트로 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.