Android में SMS भेजना - डुअल SIM सपोर्ट के साथ
यह ट्यूटोरियल दिखाता है कि कैसे SmsManager का उपयोग करके SMS भेजा जाता है, रनटाइम परमिशन हैंडलिंग और डुअल SIM डिवाइसेज के लिए विचार शामिल हैं।
चरण 1: प्रोजेक्ट बनाएं
Android Studio में नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट में इनपुट फील्ड्स
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/editTextNum"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="मोबाइल नंबर दर्ज करें"
android:inputType="phone" />
<EditText
android:id="@+id/editTextMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="अपना संदेश दर्ज करें"
android:inputType="textMultiLine"
android:minHeight="100dp" />
<Button
android:id="@+id/btnSendMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="16dp"
android:text="संदेश भेजें" />
</LinearLayout>
चरण 3: परमिशन और SMS लॉजिक
src/MainActivity.java:
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.List;
public class MainActivity extends AppCompatActivity {
Button btnSend;
EditText editTextNum, editTextMsg;
private static final int PERMISSION_REQUEST = 101;
private int selectedSimSlot = 0; // 0 = डिफॉल्ट, 1 = SIM 1, 2 = SIM 2
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextNum = findViewById(R.id.editTextNum);
editTextMsg = findViewById(R.id.editTextMsg);
btnSend = findViewById(R.id.btnSendMsg);
btnSend.setOnClickListener(v -> sendSMS());
checkDualSimSupport();
}
private void checkDualSimSupport() {
SubscriptionManager sm = (SubscriptionManager) getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE);
if (sm != null) {
List subs = sm.getActiveSubscriptionInfoList();
if (subs != null && subs.size() > 1) {
// डुअल SIM डिटेक्टेड - यूजर को SIM चुनने दें
// यहां डायलॉग या स्पिनर जोड़ सकते हैं
}
}
}
private void sendSMS() {
String number = editTextNum.getText().toString().trim();
String message = editTextMsg.getText().toString().trim();
if (TextUtils.isEmpty(number) || TextUtils.isEmpty(message)) {
Toast.makeText(this, "नंबर और संदेश दोनों आवश्यक हैं", Toast.LENGTH_SHORT).show();
return;
}
if (!TextUtils.isDigitsOnly(number)) {
Toast.makeText(this, "कृपया सही नंबर दर्ज करें", Toast.LENGTH_SHORT).show();
return;
}
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS);
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
sendMessage(number, message);
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST);
}
}
private void sendMessage(String number, String message) {
try {
SmsManager smsManager;
// डुअल SIM के लिए विशिष्ट SIM स्लॉट चुनें
if (selectedSimSlot > 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
SubscriptionManager sm = (SubscriptionManager) getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE);
List subs = sm.getActiveSubscriptionInfoList();
if (subs != null && selectedSimSlot <= subs.size()) {
smsManager = SmsManager.getSmsManagerForSubscriptionId(subs.get(selectedSimSlot - 1).getSubscriptionId());
} else {
smsManager = SmsManager.getDefault();
}
} else {
smsManager = SmsManager.getDefault();
}
// लंबे संदेशों के लिए विभाजित करें
if (message.length() > 160) {
List parts = smsManager.divideMessage(message);
smsManager.sendMultipartTextMessage(number, null, parts, null, null);
} else {
smsManager.sendTextMessage(number, null, message, null, null);
}
Toast.makeText(this, "संदेश भेजा गया", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(this, "भेजने में विफल: " + e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
sendSMS();
} else {
Toast.makeText(this, "SMS भेजने की परमिशन आवश्यक है", Toast.LENGTH_SHORT).show();
}
}
}
}
चरण 4: मैनिफेस्ट में परमिशन
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- डुअल SIM के लिए -->
<application ...>
<activity android:name=".MainActivity">...</activity>
</application>
</manifest>
डुअल SIM के लिए महत्वपूर्ण बिंदु
SmsManager.getDefault()डिफॉल्ट SIM उपयोग करता हैSmsManager.getSmsManagerForSubscriptionId()विशिष्ट SIM के लिए (API 22+)SubscriptionManagerसे एक्टिव सब्सक्रिप्शन जानें- यूजर को SIM चुनने का विकल्प दें
बेस्ट प्रैक्टिसेज
- लंबे संदेशों के लिए
divideMessage()औरsendMultipartTextMessage()उपयोग करें - भेजने से पहले नंबर वैलिडेट करें
- एरर हैंडलिंग के लिए try-catch ब्लॉक उपयोग करें
- डिलीवरी रिपोर्ट के लिए PendingIntent जोड़ें