2012-01-25 27 views
14

में SMSManager का उपयोग कर एसएमएस भेजने के लिए अपने आवेदन में मैं क्या असमर्थ डिफ़ॉल्ट संदेश इस का उपयोग नहीं करने चाहते हैं। ऐसा करने के लिए मैंने निम्नलिखित लिंक का पालन किया In Android is it possible to send sms message to more than one recipient in code?एंड्रॉयड

  • और वह कोड भी काम करता था। लेकिन मैं इस संदेश को कोड से भेज रहा हूं, फ़ोन आउटबॉक्स और इनबॉक्स पर सहेजे नहीं गए हैं।
  • मैं अपने कोड में इस तरह एसएमएस प्रबंधक का उपयोग कर रहा

    SmsManager एसएमएस = SmsManager.getDefault(); sms.sendTextMessage (PhoneNumber, अशक्त, संदेश, अशक्त, नल);

लेकिन यह sms.please नहीं भेज रहा है मुझे कैसे मैं एंड्रॉयड में एसएमएस भेज सकते हैं के साथ मदद - मैं भी PendingIntent sentPI = PendingIntent.getBroadcast (यह, 0, नई आशय ( भेजा) निम्नलिखित की कोशिश की है , 0);

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
new Intent(DELIVERED), 0); 
SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 

यह भी काम नहीं कर रहा है।
SMSAPPActivity.java

संपादित करें:

btnSendSMS.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String message = txtMessage.getText().toString(); 
       String[] PhnNoArray = new String[2]; 
       PhnNoArray[0] = "9999999999"; 
       PhnNoArray[1] = "8888888888"; 
       // StringTokenizer st = new StringTokenizer(phoneNo, ","); 
       smsManager = SmsManager.getDefault(); 
       for (int i = 0; i < PhnNoArray.length; i++) { 
        smsManager = SmsManager.getDefault(); 
         // this is the function that does all the magic 
//      sms.sendTextMessage(phoneNumber, null, msg, pi, null); 
        smsManager.sendTextMessage(PhnNoArray[i], null, message, null, 
          null); 
        Toast.makeText(getBaseContext(), "SMS sent : " + i, 
          Toast.LENGTH_SHORT).show(); 
       } 
} 
     }); 

कृपया संपादित देख सकते हैं और मुझे बताओ कि इस कोड

का उपयोग करके मैं क्या किया है wrong.tost को दिखा रहा है, लेकिन एसएमएस अन्य फोन पर प्राप्त नहीं होता है
+0

तुम्हारा क्या मतलब है "डिफ़ॉल्ट संदेश प्रेषक"? कृपया – JoxTraex

+0

@JoxTraex को स्पष्ट करें: डिफ़ॉल्ट संदेश प्रेषक द्वारा मेरा मतलब है कि मैं संदेश भेजने के लिए सिस्टम के मैसेजिंग ऐप को खोलना नहीं चाहता हूं, मैं केवल अपने आवेदन से संदेश भेजना चाहता हूं ... – Shruti

+0

मैं यहां कुछ ऐसा कर रहा हूं !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-sms-mms-in-android – toobsco42

उत्तर

20

मैं कोड को कई नंबरों पर एसएमएस भेजने के लिए निम्नलिखित और भेजा करते थे एसएमएस संदेशों

private void sendSMS(String phoneNumber, String message) { 
     String SENT = "SMS_SENT"; 
     String DELIVERED = "SMS_DELIVERED"; 

     PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
       SENT), 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
       new Intent(DELIVERED), 0); 

     // ---when the SMS has been sent--- 
     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) { 
       case Activity.RESULT_OK: 
        ContentValues values = new ContentValues(); 
        for (int i = 0; i < MobNumber.size() - 1; i++) { 
         values.put("address", MobNumber.get(i).toString());// txtPhoneNo.getText().toString()); 
         values.put("body", MessageText.getText().toString()); 
        } 
        getContentResolver().insert(
          Uri.parse("content://sms/sent"), values); 
        Toast.makeText(getBaseContext(), "SMS sent", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(getBaseContext(), "Generic failure", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(getBaseContext(), "No service", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        Toast.makeText(getBaseContext(), "Null PDU", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Toast.makeText(getBaseContext(), "Radio off", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       } 
      } 
     }, new IntentFilter(SENT)); 

     // ---when the SMS has been delivered--- 
     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS delivered", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case Activity.RESULT_CANCELED: 
        Toast.makeText(getBaseContext(), "SMS not delivered", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       } 
      } 
     }, new IntentFilter(DELIVERED)); 

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 
    } 

में सहेजा जाता है एकाधिक संख्याओं मैं के रूप में समारोह ऊपर उपयोग करने के लिए संदेश भेजने के लिए:

if (MobNumber != null) { 

       for (int i = 0; i < MobNumber.size(); i++) { 
        String message = MessageText.getText().toString(); 
        String tempMobileNumber = MobNumber.get(i).toString(); 
        sendSMS(tempMobileNumber, message); 
       } 
+4

इस कोड में, हर बार जब आप इस फ़ंक्शन को कॉल करते हैं 2 * नया * ब्रॉडकास्ट रिसीवर पंजीकृत हो जाता है। जब आप इस फ़ंक्शन को कई बार कॉल करना शुरू करते हैं तो वह थोड़ा पागल हो जाएगा। – Billy

+0

आप रिसीवर unregisterReceiver (यह) के अंदर कॉल कर सकते हैं; इससे बचने के लिए –

+0

आप जीवन बचतकर्ता हैं ... लेकिन जब हम एकाधिक संख्याओं पर संदेश भेजते हैं तो यह भेजी गई वस्तुओं में सूची की केवल पहली संख्या को सभी नंबरों पर संग्रहीत करता है? –

3

1), आउटबॉक्स के बजाय भेजा गया में संदेश जोड़ने के रूप में आउट-बॉक्स संदेशों जो भेज सकते हैं या राज्य भेजने में लगता होते हैं।

2) जब आप "सामग्री में एक ही समय में उन्हें जोड़ संदेश भेजने: // एसएमएस/ uri भेजा

क्या यू रोक रहा है उन्हें डेटाबेस में स्टोर करने के लिए और क्या आप अभी तक की कोशिश की

।।।

सामग्री का उपयोग करके SendSMS

smsManager.sendTextMessage(number, null,desc, null, null); 

और लिए नीचे दिए गए कोड का उपयोग करें: // एसएमएस/ यूआरआई भेजा है, आप संदेश Dat में एक ही पाठ संदेश के सम्मिलित कर सकते हैं अपमानित करना

+0

: उत्तर देने के लिए धन्यवाद .. मेरा संपादन देखें मैंने कोड भी जोड़ा है यह – Shruti

+0

भेजे गए एसएमएस के लिए टोस्ट दिखाता है उत्तर कृपया एक बार इसके माध्यम से जाओ। उपर्युक्त पंक्ति "सामग्री: // एसएमएस/प्रेषित" एक सामग्री यूरी है, जो भेजे गए संदेशों की डेटाबेस तालिका को इंगित करती है, इस संदेश को अपने यूआरआई में डालें, इसलिए संदेश संदेश डीबी में भेजा और डाला जाएगा जो संदेश ऐप में भी दर्शाता है ... – AAnkit

+0

लेकिन मुझे कई नंबरों पर संदेश भेजना है – Shruti

1

तो बस उसे सीधे भेज ... SmsManager का उपयोग कर। केवल समस्या यह है कि उपयोगकर्ता को इसके बारे में पता नहीं चलेगा।

2

आशा इस कर सकते हैं आपकी मदद।

MainActivity।जावा

import android.os.Bundle; 
import android.app.Activity; 
import android.telephony.SmsManager; 
import android.view.Menu; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.*; 
import android.view.View.OnClickListener; 
import android.view.*; 


public class MainActivity extends Activity implements OnClickListener{ 


Button click; 
EditText txt; 
TextView txtvw; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

click = (Button)findViewById(R.id.button); 
txt = (EditText)findViewById(R.id.editText); 
txtvw = (TextView)findViewById(R.id.textView1); 

click.setOnClickListener(this); 
} 

@Override 
public void onClick(View v){ 


txt.setText(""); 
v = this.getCurrentFocus(); 

try{ 
    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage("8017891398",null,"Sent from Android",null,null); 
} 
catch(Exception e){ 
    txtvw.setText("Message not sent!"); 
} 
if(v != null){ 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(v.getWindowToken(),0); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
getMenuInflater().inflate(R.menu.main, menu); 
return true; 
    } 

} 

में इस लाइन को जोड़ने के AndroidManifest.xml

<uses-permission android:name="android.permission.SEND_SMS" /> 

enter image description here

0

मेरे मामले में, यह तथ्य था कि संदेश के मुख्य भाग 160 अक्षरों से अधिक हो गई है और मैं का इस्तेमाल किया था sendMultipartTextMessagesendTextMessage के बदले में।

2

यदि आप दोहरी सिम डिवाइस का उपयोग कर रहे हैं तो आपको प्रेषक संख्या का उल्लेख करना होगा, आप उस समय शून्य नहीं पारित कर सकते हैं। अन्यथा, SmsManager SmsManager.RESULT_ERROR_GENERIC_FAILURE नामक एक त्रुटि फेंक देगा।

कोड सक्रिय सिम्स की संख्या की जांच करने के:

public static int getNumberOfActiveSim(Context context) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { 
       SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 
       List<SubscriptionInfo> subscriptionInfo = subscriptionManager.getActiveSubscriptionInfoList(); 
       return subscriptionInfo != null ? subscriptionInfo.size() : 0; 
      } 
      TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
      if(telephonyManager != null && telephonyManager.getSimState() == TelephonyManager.SIM_STATE_ABSENT){ 
       return 1; 
      } 
      return 0; 
     }