5

My sendSms function has try and catch blocks. Try block is default device sms application. catch block is other sms applications which set as current sms application for example Google SMS app.

Some phones(generally API version is 19) have this error when running this sendSms code.

My error log:

Exception android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=sms:xxxxxxxxxxxxxxx flg=0x10000000 (has extras) }
android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1638)
android.app.Instrumentation.execStartActivity (Instrumentation.java:1430)
android.app.ContextImpl.startActivity (ContextImpl.java:1135)
android.app.ContextImpl.startActivity (ContextImpl.java:1117)
android.content.ContextWrapper.startActivity (ContextWrapper.java:311)
android.view.View.performClick (View.java:4463)
android.view.View$PerformClick.run (View.java:18794)
android.os.Handler.handleCallback (Handler.java:808)
android.os.Handler.dispatchMessage (Handler.java:103)
android.os.Looper.loop (Looper.java:193)
android.app.ActivityThread.main (ActivityThread.java:5299)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:825)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:641)
dalvik.system.NativeStart.main (NativeStart.java)

My code:

private void sendSms(String phoneNumber){
   try {
    
        Intent sendIntent = new Intent(Intent.ACTION_VIEW);
        sendIntent.putExtra("sms_body", getContext().getResources().getString(R.string.inviteSms));
        sendIntent.setType("vnd.android-dir/mms-sms");
        sendIntent.putExtra("address", phoneNumber);
        sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getContext().startActivity(sendIntent);
    
       } catch (Exception e) {
    
        String SMS_DEFAULT_APPLICATION = "sms_default_application";
    
        String defaultApplication = Settings.Secure.getString(getContext().getContentResolver(), SMS_DEFAULT_APPLICATION);
        PackageManager pm = getContext().getPackageManager();
        Intent intent = pm.getLaunchIntentForPackage(defaultApplication);
    
        if (intent != null) {
    
        Intent smsIntent = new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", phoneNumber, null));
        smsIntent.putExtra("sms_body", getContext().getString(R.string.inviteSms));
        smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getContext().startActivity(smsIntent);
        }
       }
}
propoLis
  • 1,229
  • 1
  • 14
  • 48
  • 1
    Possible duplicate of [Send SMS via intent](https://stackoverflow.com/questions/9798657/send-sms-via-intent) – AskNilesh Feb 19 '18 at 13:07
  • no @NileshRathod it is different question, I already made your example answer – propoLis Feb 19 '18 at 13:10
  • 1
    check this https://stackoverflow.com/questions/20079047/android-kitkat-4-4-hangouts-cannot-handle-sending-sms-intent – vm345 Feb 19 '18 at 13:10

2 Answers2

5
     if (getDefaultSmsAppPackageName() != null) {
         Uri smsUri=  Uri.parse("smsto:" + phoneNumber);
         Intent intent = new Intent(Intent.ACTION_VIEW, smsUri);
         intent.putExtra("sms_body", "sms text");
         intent.setType("vnd.android-dir/mms-sms"); 
         startActivity(intent);
     }

    public static String getDefaultSmsAppPackageName(@NonNull Context context) {
        String defaultSmsPackageName;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(context);
            return defaultSmsPackageName;
        } else {
            Intent intent = new Intent(Intent.ACTION_VIEW)
                    .addCategory(Intent.CATEGORY_DEFAULT).setType("vnd.android-dir/mms-sms");
            final List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, 0);
            if (resolveInfos != null && !resolveInfos.isEmpty())
                return resolveInfos.get(0).activityInfo.packageName;

        }
       return null;
    }
marcolz
  • 2,880
  • 2
  • 23
  • 28
Gautam Kushwaha
  • 281
  • 3
  • 15
0
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
StringBuilder uri = new StringBuilder("sms:" + mobilenumber);
sendIntent.putExtra("sms_body", "");
sendIntent.setType("vnd.android-dir/mms-sms");
sendIntent.setData("");
startActivity(sendIntent);

First time please remove setFlags and try my source.Also share your gradle file's source

BekaKK
  • 2,173
  • 6
  • 42
  • 80