2011-06-15 14 views
9

मैं आईफोन विकास से आ रहा हूं जहां आप उपयोगकर्ता को भेजने की पुष्टि करने के बिना पृष्ठभूमि में एक एसएमएस नहीं भेज सकते हैं। क्या एंड्रॉइड में पृष्ठभूमि में एसएमएस भेजा जा सकता है ताकि उपयोगकर्ता हस्तक्षेप की आवश्यकता न हो?एंड्रॉइड का उपयोग कर बैकग्राउंड में एसएमएस संदेश कैसे भेज सकता हूं?

+4

बाहर चेक लिंक के लिए यह एक http://stackoverflow.com/questions/5671564/how-to-send-sms-message-on-android-device-in-the-background – sealz

उत्तर

16

टोस्ट के रूप में एसएमएस-वितरण अधिसूचना के साथ एसएमएस भेजें।

विधि नीचे कॉल करें।

sendSMS("98********","This is test message"); 

नीचे विधि हस्ताक्षर।

/* 
* BroadcastReceiver mBrSend; BroadcastReceiver mBrReceive; 
*/ 
private void sendSMS(String phoneNumber, String message) { 
    ArrayList<PendingIntent> sentPendingIntents = new ArrayList<PendingIntent>(); 
    ArrayList<PendingIntent> deliveredPendingIntents = new ArrayList<PendingIntent>(); 
    PendingIntent sentPI = PendingIntent.getBroadcast(mContext, 0, 
      new Intent(mContext, SmsSentReceiver.class), 0); 
    PendingIntent deliveredPI = PendingIntent.getBroadcast(mContext, 0, 
      new Intent(mContext, SmsDeliveredReceiver.class), 0); 
    try { 
     SmsManager sms = SmsManager.getDefault(); 
     ArrayList<String> mSMSMessage = sms.divideMessage(message); 
     for (int i = 0; i < mSMSMessage.size(); i++) { 
      sentPendingIntents.add(i, sentPI); 
      deliveredPendingIntents.add(i, deliveredPI); 
     } 
     sms.sendMultipartTextMessage(phoneNumber, null, mSMSMessage, 
       sentPendingIntents, deliveredPendingIntents); 

    } catch (Exception e) { 

     e.printStackTrace(); 
     Toast.makeText(getBaseContext(), "SMS sending failed...",Toast.LENGTH_SHORT).show(); 
    } 

} 

अब दो और वर्ग SmsDeliveredReceiver, SmsSentReceiver नीचे जैसा है।

public class SmsDeliveredReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent arg1) { 
    switch (getResultCode()) { 
    case Activity.RESULT_OK: 
     Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show(); 
     break; 
    case Activity.RESULT_CANCELED: 
     Toast.makeText(context, "SMS not delivered", Toast.LENGTH_SHORT).show(); 
     break; 
    } 
} 

}

अब SMSSentReceiver।

public class SmsSentReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent arg1) { 
    switch (getResultCode()) { 
    case Activity.RESULT_OK: 
     Toast.makeText(context, "SMS Sent", Toast.LENGTH_SHORT).show(); 

     break; 
    case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
     Toast.makeText(context, "SMS generic failure", Toast.LENGTH_SHORT) 
       .show(); 

     break; 
    case SmsManager.RESULT_ERROR_NO_SERVICE: 
     Toast.makeText(context, "SMS no service", Toast.LENGTH_SHORT) 
       .show(); 

     break; 
    case SmsManager.RESULT_ERROR_NULL_PDU: 
     Toast.makeText(context, "SMS null PDU", Toast.LENGTH_SHORT).show(); 
     break; 
    case SmsManager.RESULT_ERROR_RADIO_OFF: 
     Toast.makeText(context, "SMS radio off", Toast.LENGTH_SHORT).show(); 
     break; 
    } 
} 

}

अब अनुमतियां अपने AndroidManifest.xml खोलने के लिए और रेखा से नीचे जोड़ने

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

और उसके किया .......

+0

इन प्रसारण रिसीवरों के लिए मैनिफेस्ट में इरादा फ़िल्टर क्या है? – Saty

+0

@ सैंडी मैंने कोशिश की है लेकिन यह काम नहीं कर रहा है –

+0

@ सैटी यहां प्रसारण भेजने वाले एसएमएस भेजने के लिए हैं। <रिसीवर एंड्रॉइड: नाम = "। एसएमएससेन्ट रिसीवर" /> <रिसीवर एंड्रॉइड: नाम = "। एसएमएसडेलिडेड रिसीवर" /> आप इसे अपनी मेनिफेस्ट फ़ाइल में परिभाषित कर सकते हैं। – GrIsHu

2

http://thinkandroid.wordpress.com/2010/01/08/sending-sms-from-application/ देखें। आपको उचित अनुमतियों की आवश्यकता होगी।

+0

धन्यवाद। लेकिन लेख ने यह नहीं समझाया कि क्या मैं पृष्ठभूमि में एसएमएस भेज सकता हूं – Zubair

+0

आप उस तर्क को 'सेवा' या 'ब्रॉडकास्ट रिसीवर' से उपयोग कर सकते हैं जो पृष्ठभूमि प्रभावी ढंग से है (जब तक आपके पास पृष्ठभूमि का कोई अलग विचार न हो?)। यदि आप विशेष रूप से और अधिक करने के लिए प्रयास कर रहे हैं तो आप क्या कह रहे हैं? – Femi

+0

क्या आपका मतलब है कि हम ब्रॉडकास्ट रिसीवर या सेवा कक्षाओं से कोड कॉपी कर सकते हैं? – Zubair

16

हाँ आप भी सक्षम हैं।

SmsManager sm = SmsManager.getDefault(); 
sm.sendTextMessage(number, null, message, null, null); 
+0

क्या आपने यह कोशिश की है। क्या यह पृष्ठभूमि से काम करता है? – Zubair

+2

@ जुबैर मैंने कभी व्यक्तिगत रूप से कोशिश नहीं की है, दूसरों के पास है और यह काम करता है। आपके प्रश्न टिप्पणी में भेजे गए लिंक का उल्लेख है कि यह काम करता है। – sealz

+0

इसे मैनिफेस्ट में न भूलें: <उपयोग-अनुमति एंड्रॉइड: name = "android.permission.SEND_SMS" /> –

0

सर्वश्रेष्ठ उत्तर अच्छा है, लेकिन इसके बाद के संस्करण एपीआई स्तर 23 आपको व्यावहारिक रूप से अनुमति प्राप्त करने की आवश्यकता होगी। अन्यथा हर बार अनुमति दी जाएगी।

private static final int PERMISSION_REQUEST_CODE = 1; 

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { 

    if (checkSelfPermission(Manifest.permission.SEND_SMS) 
      == PackageManager.PERMISSION_DENIED) { 

     Log.d("permission", "permission denied to SEND_SMS - requesting it"); 
     String[] permissions = {Manifest.permission.SEND_SMS}; 

     requestPermissions(permissions, PERMISSION_REQUEST_CODE); 

    } 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^