package com.jarifjak.smsstart; import androidx.appcompat.app.AppCompatActivity; import android.Manifest; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.telephony.SmsManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.util.Log; import android.view.View; import android.widget.Toast; import com.jarifjak.smsstart.databinding.ActivityMainBinding; import com.karumi.dexter.Dexter; import com.karumi.dexter.MultiplePermissionsReport; import com.karumi.dexter.PermissionToken; import com.karumi.dexter.listener.PermissionDeniedResponse; import com.karumi.dexter.listener.PermissionGrantedResponse; import com.karumi.dexter.listener.PermissionRequest; import com.karumi.dexter.listener.multi.MultiplePermissionsListener; import com.karumi.dexter.listener.single.DialogOnDeniedPermissionListener; import com.karumi.dexter.listener.single.PermissionListener; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Objects; public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; HashMap> carriersInfo = new LinkedHashMap<>(); int activeSubscriptionId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); Objects.requireNonNull(getSupportActionBar()).hide(); init(); } private void init() { setPermission(); getAndSetSimInfo(); setListener(); } private void sendBulkSMS(String inputNumber, String msg) { String[] numbers = inputNumber.split(", "); new Thread(() -> { for (String number : numbers) { Log.d("TAG", "run: \n\n\n\n" + number); try { SmsManager smsManager = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { smsManager = SmsManager.getSmsManagerForSubscriptionId(activeSubscriptionId); } else { smsManager = SmsManager.getDefault(); } smsManager.sendTextMessage(number,null, msg, null, null); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(),"Message Sent",Toast.LENGTH_LONG).show(); } }); } catch (Exception e) { Toast.makeText(getApplicationContext(),"Some fields are Empty",Toast.LENGTH_LONG).show(); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } private void getAndSetSimInfo() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { SubscriptionManager subscriptionManager = SubscriptionManager.from(getApplicationContext()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { return; } } List subscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList(); int id = 0; if (subscriptionInfoList != null && subscriptionInfoList.size() > 0) { for (SubscriptionInfo subscriptionInfo : subscriptionInfoList) { if (id == 0) { activeSubscriptionId = subscriptionInfo.getSubscriptionId(); } int subscriptionId = subscriptionInfo.getSubscriptionId(); String number = subscriptionInfo.getNumber(); String carrierName = (String) subscriptionInfo.getCarrierName(); HashMap carrierInfo = new LinkedHashMap<>(); carrierInfo.put("subscriptionId", subscriptionId); carrierInfo.put("carrierName", carrierName); carrierInfo.put("number", number); carriersInfo.put(id, carrierInfo); if (id == 0) { binding.sim1Radio.setText(carrierName); } else { binding.sim2Radio.setText(carrierName); } id++; } } } } private void setListener() { binding.sendButton.setOnClickListener(v -> { String number = Objects.requireNonNull(binding.numberTV.getText()).toString(); String msg= Objects.requireNonNull(binding.smsTV.getText()).toString(); sendBulkSMS(number, msg); }); binding.sim1Radio.setOnClickListener(v -> activeSubscriptionId = (int) carriersInfo.get(0).get("subscriptionId")); binding.sim2Radio.setOnClickListener(v -> activeSubscriptionId = (int) carriersInfo.get(1).get("subscriptionId")); } private void setPermission() { Dexter.withContext(this) .withPermissions(Manifest.permission.SEND_SMS, Manifest.permission.READ_PHONE_STATE) .withListener(new MultiplePermissionsListener() { @Override public void onPermissionsChecked(MultiplePermissionsReport multiplePermissionsReport) { Toast.makeText(MainActivity.this, multiplePermissionsReport.areAllPermissionsGranted() ? "Granted ALl" : "Denied", Toast.LENGTH_SHORT).show(); } @Override public void onPermissionRationaleShouldBeShown(List list, PermissionToken permissionToken) { } }).check(); } }