インテントで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
チェックアウトgist.github.com/gelldur/9c199654c91b13478979 SMSアプリで共有できます
Dawid

回答:


238

SMSアクティビティの起動を開始するには、これが必要です。

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

エキストラを追加して、このような独自のメッセージを入力できます

sendIntent.putExtra("sms_body", x); 

次に、意図してstartActivityを実行します。

startActivity(sendIntent);

試しましたが、あなたが与えたものを正確に書くと、Eclipseコンソールが(コンパイル時に)「ランチャーアクティビティが見つかりません!」
Olivier69

わかりました、マニフェストのインテントフィルターに次の属性を持つアクティビティがありますか?<action android:name = "android.intent.action.MAIN" /> <category android:name = "android.intent.category.LAUNCHER" />
jqpubliq

実際、ローンチはappwidgetactivityから行われます。ここから来るよ、私はあなたがしたことをマニフェストに入れて何も起こらない...私は他の機能で私のボタンをテストしました、そしてこれは行きたくないです!!
Olivier69

22
「to」ボックスに電話番号を自動で含めるには、コードのsetData行をsendIntent.setData(Uri.parse("sms:" + phoneNumber));(jqpubliqとjaydeepwに感謝)に変更します
tmr

2
ユーザーがインテント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
これはandroid 4.4では動作しないことに注意してください。おそらく「vnd.android-dir / mms-sms」はサポートされなくなりました
Max Ch

2
Android 4.4.2でテストしたところ、機能しています。その発表に私をリンクしていただけませんか。@MaxCh
theknut

3
電話番号は、私の場合のように追加されていない場合は、単に追加しますintent.setData(Uri.parse("smsto:" + phoneNumber));
ユートピア

4
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) }
グエンミンビン2017年

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 2015年

3
@KarthikeyanVe試して頂けますか?インテントsendIntent = new Intent(Intent.ACTION_SENDTO); sendIntent.setData(Uri.parse( "smsto:phonenumber"));
android_developer 2015年

私は試した。正常に動作しています。しかし、メッセージアプリから戻るボタンをクリックすると、アプリも閉じます。メッセージアプリから押し戻した場合は、アプリを離れたところに戻るはずです。
Karthikeyan Ve 2015年

2
すばらしい答えです。デフォルトのSMSアプリに直接移動したい場合に使用します。これは魅力のように機能します。チューザが必要な場合は、ここで他の回答を参照してください。
Nemanja Kovacevic

1
メッセージから戻ったときにアプリが閉じる理由
Muhammad Younas

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 2013

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作成アクティビティでテキストと電話番号を認識するためのキーです。ここで注意してください。


メッセージインテントを開始したとき、または戻るキーを押したときにアプリが閉じるアプリが閉じている
Muhammad Younas

まず最初に、このコードを実行すると、SMS書き込み機能が起動するかどうかを教えてください。アプリが戻るボタンを押した後に閉じると、特にpublic void BackPressed(){}関数のように、コードに問題が発生します
Pirファヒムシャー

BackPresed Functionnを上書きしませんでした
Muhammad Younas '10

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 2013年

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.ロンバード

1
@ G.Lombard Lombardはい、このコードはs3では機能しません。s3の解決策はありますか?
Vivek Kumar Srivastava 2013年

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アプリを開きたい場合は、
Nugatを搭載

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アプリの選択を回避する方法...唯一のデフォルトが開始されます...
マババー・ラーマン・カーン

3

デフォルトのSMSアプリを開いて、以下のように詳細を渡すことができます。
注:uが多くの番号に送信する場合は、各番号を「;」で区切ります。ひもの中

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つのデフォルトのメッセージアプリという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

以下のコードはAndroid 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.