Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में डुअल SIM मोबाइल पर SMSManager से SMS कैसे भेजें?

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 जोड़ें
  1. एंड्रॉइड में फाइल अटैचमेंट के साथ ईमेल कैसे भेजें? एंड्रॉइड में फाइल अटैचमेंट के साथ ईमेल कैसे भेजें?

    एंड्रॉइड में इंटेंट का उपयोग करके ईमेल भेजना यह ट्यूटोरियल दर्शाता है कि कैसे एक ईमेल कंपोजर बनाएं जिसमें प्राप्तकर्ता, विषय, संदेश और फाइल अटैचमेंट शामिल हों, फिर डिवाइस पर इंस्टॉल ईमेल ऐप्स का उपयोग करके भेजें। आवश्यक अनुमतियाँ <uses-permission android:name=android.permission.INTERNET /> &l

  1. एंड्रॉइड में अलार्म मैनेजर का उपयोग करके सर्विस कैसे शुरू करें? एंड्रॉइड में अलार्म मैनेजर का उपयोग करके सर्विस कैसे शुरू करें?

    AlarmManager के साथ निर्धारित समय पर सर्विस शुरू करें यह उदाहरण दर्शाता है कि AlarmManager और PendingIntent का उपयोग करके निर्धारित समय पर बैकग्राउंड सर्विस कैसे शुरू करें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट में Start/Stop बटन res/layout/activity_m

  1. Android में JavaMail API से ईमेल कैसे भेजें? Android में JavaMail API से ईमेल कैसे भेजें?

    यह उदाहरण दर्शाता है कि Android ऐप में JavaMail API का उपयोग करके प्रोग्रामेटिकली ईमेल कैसे भेजा जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project पर जाएं। चरण 2: निर्भरताएं जोड़ें build.gradle (Module: app) में JavaMail निर्भरताएं जोड़ें: dependencies { implementation