Android में एसएमएस और एमएमएस भेजना और प्राप्त करना (प्री किट कैट एंड्रॉइड 4.4)


131

मुझे पता चला है कि एसएमएस संदेश कैसे भेजें और प्राप्त करें। एसएमएस संदेश भेजने के लिए मुझे कक्षा के तरीकों sendTextMessage()और sendMultipartTextMessage()तरीकों को कॉल करना पड़ा SmsManager। एसएमएस संदेश प्राप्त करने के लिए, मुझे AndroidMainfest.xmlफ़ाइल में एक रिसीवर पंजीकृत करना होगा । तब मुझे इसकी onReceive()विधि को ओवरराइड करना पड़ा BroadcastReceiver। मैंने नीचे उदाहरण शामिल किए हैं।

MainActivity.java

public class MainActivity extends Activity {
    private static String SENT = "SMS_SENT";
    private static String DELIVERED = "SMS_DELIVERED";
    private static int MAX_SMS_MESSAGE_LENGTH = 160;

    // ---sends an SMS message to another device---
    public static void sendSMS(String phoneNumber, String message) {

        PendingIntent piSent = PendingIntent.getBroadcast(mContext, 0, new Intent(SENT), 0);
        PendingIntent piDelivered = PendingIntent.getBroadcast(mContext, 0,new Intent(DELIVERED), 0);
        SmsManager smsManager = SmsManager.getDefault();

        int length = message.length();          
        if(length > MAX_SMS_MESSAGE_LENGTH) {
            ArrayList<String> messagelist = smsManager.divideMessage(message);          
            smsManager.sendMultipartTextMessage(phoneNumber, null, messagelist, null, null);
        }
        else
            smsManager.sendTextMessage(phoneNumber, null, message, piSent, piDelivered);
        }
    }

    //More methods of MainActivity ...
}

SMSReceiver.java

public class SMSReceiver extends BroadcastReceiver {
    private final String DEBUG_TAG = getClass().getSimpleName().toString();
    private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    private Context mContext;
    private Intent mIntent;

    // Retrieve SMS
    public void onReceive(Context context, Intent intent) {
        mContext = context;
        mIntent = intent;

        String action = intent.getAction();

        if(action.equals(ACTION_SMS_RECEIVED)){

            String address, str = "";
            int contactId = -1;

            SmsMessage[] msgs = getMessagesFromIntent(mIntent);
            if (msgs != null) {
                for (int i = 0; i < msgs.length; i++) {
                    address = msgs[i].getOriginatingAddress();
                    contactId = ContactsUtils.getContactId(mContext, address, "address");
                    str += msgs[i].getMessageBody().toString();
                    str += "\n";
                }
            }   

            if(contactId != -1){
                showNotification(contactId, str);
            }

            // ---send a broadcast intent to update the SMS received in the
            // activity---
            Intent broadcastIntent = new Intent();
            broadcastIntent.setAction("SMS_RECEIVED_ACTION");
            broadcastIntent.putExtra("sms", str);
            context.sendBroadcast(broadcastIntent);
        }

    }

    public static SmsMessage[] getMessagesFromIntent(Intent intent) {
        Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
        byte[][] pduObjs = new byte[messages.length][];

        for (int i = 0; i < messages.length; i++) {
            pduObjs[i] = (byte[]) messages[i];
        }
        byte[][] pdus = new byte[pduObjs.length][];
        int pduCount = pdus.length;
        SmsMessage[] msgs = new SmsMessage[pduCount];
        for (int i = 0; i < pduCount; i++) {
            pdus[i] = pduObjs[i];
            msgs[i] = SmsMessage.createFromPdu(pdus[i]);
        }
        return msgs;
    }

    /**
    * The notification is the icon and associated expanded entry in the status
    * bar.
    */
    protected void showNotification(int contactId, String message) {
        //Display notification...
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myexample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_MMS" />
    <uses-permission android:name="android.permission.WRITE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:debuggable="true"
        android:icon="@drawable/ic_launcher_icon"
        android:label="@string/app_name" >

        <activity
            //Main activity...
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            //Activity 2 ...
        </activity>
        //More acitivies ...

        // SMS Receiver
        <receiver android:name="com.myexample.receivers.SMSReceiver" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

    </application>
</manifest>

हालांकि, मैं सोच रहा था कि क्या आप इसी तरह से एमएमएस संदेश भेज और प्राप्त कर सकते हैं। कुछ शोध करने के बाद, ब्लॉग पर उपलब्ध कराए गए कई उदाहरण केवल Intentमूल मैसेजिंग एप्लिकेशन को पास करते हैं। मैं अपने आवेदन को छोड़े बिना एक एमएमएस भेजने की कोशिश कर रहा हूं। एमएमएस भेजने और प्राप्त करने का एक मानक तरीका प्रतीत नहीं होता है। किसी को भी काम करने के लिए यह मिल गया है?

इसके अलावा, मुझे पता है कि एसएमएस / एमएमएस कन्टैंटप्रॉइडर आधिकारिक एंड्रॉइड एसडीके का हिस्सा नहीं है, लेकिन मैं सोच रहा था कि कोई व्यक्ति इसे लागू करने में सक्षम हो सकता है। कोई भी मदद बहुत ही सराहनीय होगी।

अपडेट करें

मैंने एमएमएस संदेश प्राप्त BroadcastReceiverकरने के लिए AndroidManifest.xmlफ़ाइल में एक जोड़ा है

<receiver android:name="com.sendit.receivers.MMSReceiver" >
    <intent-filter>
        <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />

        <data android:mimeType="application/vnd.wap.mms-message" />
    </intent-filter>
</receiver>

MMSReceiver वर्ग में, onReceive()विधि केवल PhoneNumber को हथियाने में सक्षम है जो संदेश से भेजा गया था। आप एमएमएस से अन्य महत्वपूर्ण चीजों को कैसे पकड़ते हैं जैसे कि मीडिया अटैचमेंट (छवि / ऑडियो / वीडियो), या एमएमएस में पाठ का रास्ता?

MMSReceiver.java

public class MMSReceiver extends BroadcastReceiver {
    private final String DEBUG_TAG = getClass().getSimpleName().toString();
    private static final String ACTION_MMS_RECEIVED = "android.provider.Telephony.WAP_PUSH_RECEIVED";
    private static final String MMS_DATA_TYPE = "application/vnd.wap.mms-message";

     // Retrieve MMS
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        String type = intent.getType();

        if(action.equals(ACTION_MMS_RECEIVED) && type.equals(MMS_DATA_TYPE)){

            Bundle bundle = intent.getExtras();

            Log.d(DEBUG_TAG, "bundle " + bundle);
            SmsMessage[] msgs = null;
            String str = "";
            int contactId = -1;
            String address;

            if (bundle != null) {

                byte[] buffer = bundle.getByteArray("data");
                Log.d(DEBUG_TAG, "buffer " + buffer);
                String incomingNumber = new String(buffer);
                int indx = incomingNumber.indexOf("/TYPE");
                if(indx>0 && (indx-15)>0){
                    int newIndx = indx - 15;
                    incomingNumber = incomingNumber.substring(newIndx, indx);
                    indx = incomingNumber.indexOf("+");
                    if(indx>0){
                        incomingNumber = incomingNumber.substring(indx);
                        Log.d(DEBUG_TAG, "Mobile Number: " + incomingNumber);
                    }
                }

                int transactionId = bundle.getInt("transactionId");
                Log.d(DEBUG_TAG, "transactionId " + transactionId);

                int pduType = bundle.getInt("pduType");
                Log.d(DEBUG_TAG, "pduType " + pduType);

                byte[] buffer2 = bundle.getByteArray("header");      
                String header = new String(buffer2);
                Log.d(DEBUG_TAG, "header " + header);

                if(contactId != -1){
                    showNotification(contactId, str);
                }

                // ---send a broadcast intent to update the MMS received in the
                // activity---
                Intent broadcastIntent = new Intent();
                broadcastIntent.setAction("MMS_RECEIVED_ACTION");
                broadcastIntent.putExtra("mms", str);
                context.sendBroadcast(broadcastIntent);

            }
        }

    }

    /**
    * The notification is the icon and associated expanded entry in the status
    * bar.
    */
    protected void showNotification(int contactId, String message) {
        //Display notification...
    }
}

Android.provider.Telephony के प्रलेखन के अनुसार :

ब्रॉडकास्ट एक्शन: डिवाइस द्वारा एक नया टेक्स्ट आधारित एसएमएस संदेश प्राप्त हुआ है। आशय में निम्नलिखित अतिरिक्त मूल्य होंगे:

pdus- एक Object[]की byte[]PDUs कि संदेश श्रृंगार युक्त रों।

अतिरिक्त मान का उपयोग करके निकाला जा सकता है getMessagesFromIntent(android.content.Intent) यदि इस आशय को संसाधित करते समय कोई ब्रॉडकास्टसीवर एक त्रुटि का सामना करता है तो उसे परिणाम कोड को उचित रूप से सेट करना चाहिए।

 @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
 public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";

ब्रॉडकास्ट एक्शन: डिवाइस द्वारा एक नया डेटा आधारित एसएमएस संदेश प्राप्त हुआ है। आशय में निम्नलिखित अतिरिक्त मूल्य होंगे:

pdus- एक Object[]की byte[]PDUs कि संदेश श्रृंगार युक्त रों।

अतिरिक्त मान getMessagesFromIntent (android.content.Intent) का उपयोग करके निकाले जा सकते हैं। यदि कोई ब्रॉडकास्टसीवर इस आशय को संसाधित करते समय एक त्रुटि का सामना करता है तो उसे परिणाम कोड को उचित रूप से सेट करना चाहिए।

@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String DATA_SMS_RECEIVED_ACTION = "android.intent.action.DATA_SMS_RECEIVED";

ब्रॉडकास्ट एक्शन: डिवाइस द्वारा एक नया WAP PUSH संदेश प्राप्त हुआ है। आशय में निम्नलिखित अतिरिक्त मूल्य होंगे:

transactionId (Integer) - वैप लेनदेन आईडी

pduType (Integer) - WAP PDU प्रकार `

header (byte[]) - संदेश का हेडर

data (byte[]) - मैसेज का डेटा पेलोड

contentTypeParameters (HashMap<String,String>) - सामग्री प्रकार से जुड़ा कोई भी पैरामीटर (WSP सामग्री-प्रकार हेडर से डीकोड किया गया)

यदि कोई ब्रॉडकास्टसीवर इस आशय को संसाधित करते समय एक त्रुटि का सामना करता है तो उसे परिणाम कोड को उचित रूप से सेट करना चाहिए। ContentTypeParameters अतिरिक्त मान उनके नाम के द्वारा सूचीबद्ध सामग्री मापदंडों का मानचित्र है। यदि कोई भी अन-असाइन किए गए प्रसिद्ध पैरामीटर का सामना किया जाता है, तो मानचित्र की कुंजी 'अनसाइनड / 0x ...' होगी, जहां '...' अनसाइनड पैरामीटर का हेक्स मान है। यदि किसी पैरामीटर में नो-वैल्यू है, तो मैप में मूल्य शून्य होगा।

@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String WAP_PUSH_RECEIVED_ACTION = "android.provider.Telephony.WAP_PUSH_RECEIVED";

अद्यतन # 2

मुझे पता चला है कि एक्स्ट्रा पास कैसे PendingIntentप्राप्त किया जा सकता है BroadcastReceiver: a Android PendingIntent एक्स्ट्रा कलाकार, ब्रॉडकास्टर द्वारा प्राप्त नहीं

हालांकि, अतिरिक्त के लिए पारित हो जाता है SendBroadcastReceiver नहीं SMSReceiver । मैं SMSReceiver के लिए एक अतिरिक्त कैसे पास कर सकता हूं ?

अद्यतन # 3

एमएमएस प्राप्त करना

इसलिए अधिक शोध करने के बाद मैंने पंजीकरण करने के कुछ सुझाव देखे ContentObserver। इस तरह से आप पता लगा सकते हैं कि content://mms-sms/conversationsकंटेंट प्रोवाइडर में कोई बदलाव है या नहीं , फलस्वरूप आपको आने वाले एमएमएस का पता लगाने की अनुमति मिलती है। यहां यह काम करने के लिए निकटतम उदाहरण है जो मुझे मिला है: एमएमएस प्राप्त करना

हालांकि, वहाँ mainActivityप्रकार का एक चर है ServiceControllerServiceControllerकक्षा कहाँ से लागू की गई है? क्या किसी पंजीकृत के अन्य कार्यान्वयन हैं ContentObserver?

एमएमएस भेजना

एमएमएस भेजने के लिए, मैं इस उदाहरण पर आया हूं: एमएमएस भेजें

समस्या यह है कि मैंने अपने नेक्सस 4 पर इस कोड को चलाने की कोशिश की, जो एंड्रॉइड v4.2.2 पर है, और मुझे यह त्रुटि प्राप्त हो रही है:

java.lang.SecurityException: No permission to write APN settings: Neither user 10099 nor current process has android.permission.WRITE_APN_SETTINGS.

कक्षा Carriersकी getMMSApns()विधि में ContentProvider को क्वेरी करने के बाद त्रुटि हो जाती है APNHelper

final Cursor apnCursor = this.context.getContentResolver().query(Uri.withAppendedPath(Carriers.CONTENT_URI, "current"), null, null, null, null);

जाहिरा तौर पर आप Android 4.2 में APNs नहीं पढ़ सकते हैं

उन सभी अनुप्रयोगों के लिए विकल्प क्या है जो ऑपरेशन करने के लिए मोबाइल डेटा का उपयोग करते हैं (जैसे एमएमएस भेजना) और डिवाइस में मौजूद डिफ़ॉल्ट एपीएन सेटिंग को नहीं जानते हैं?

अद्यतन # 4

एमएमएस भेजना

मैंने इस उदाहरण का अनुसरण करने की कोशिश की है: एमएमएस भेजें

जैसा @Sam ने अपने उत्तर में सुझाव दिया:

You have to add jsoup to the build path, the jar to the build path and import com.droidprism.*; To do that in android, add the jars to the libs directory first, then configure the project build path to use the jars already in the libs directory, then on the build path config click order and export and check the boxes of the jars and move jsoup and droidprism jar to the top of the build order.

इसलिए अब मुझे SecurityException त्रुटियाँ नहीं मिलीं। मैं अभी एंड्रॉइड किटकैट पर एक Nexus 5 पर परीक्षण कर रहा हूं। सैंपल कोड चलाने के बाद कॉल करने के बाद यह मुझे 200 रिस्पॉन्स कोड देता है

MMResponse mmResponse = sender.send(out, isProxySet, MMSProxy, MMSPort);

हालांकि, मैंने उस व्यक्ति के साथ जांच की जिसे मैंने एमएमएस भेजने की कोशिश की थी। और उन्होंने कहा कि उन्हें कभी एमएमएस प्राप्त नहीं हुआ।


क्या आपने पहले इस ट्यूटोरियल को देखा है? maximbogatov.wordpress.com/2011/08/13/mms-in-android
HaemEternal

3
हाँ मेरे पास है। मैंने मैक्सिम के जवाब को एक साथ मिलाने की कोशिश की, लेकिन काम करने में सक्षम नहीं हूं। वहाँ कई वर्ग हैं जो android.provider.telephony का आयात करते हैं जो कि पदावनत होता है।
टोब्स्को 42

और संभवतः, @ साहिल के उत्तर को पढ़ने के बाद, आपने यह भी कोशिश की है: stackoverflow.com/questions/2972845/…
HaemEternal

मुझे यकीन नहीं है कि उस उत्तर को एक साथ कैसे जोड़ा जाए, हालांकि यह @ साहिल के उत्तर के समान दिखता है।
टोब्स्को 42

हाय @ toobsco42 क्या आप उन सभी क्वेरी के लिए समाधान खोजने में सक्षम हैं जिनका आप ऊपर उल्लेख करते हैं ..?
kamal_tech_view

जवाबों:


15

मुझे ठीक वही समस्या थी जिसका आप ऊपर वर्णन करते हैं (गैलेक्सी नेक्सस ऑन टी-मोबाइल यूएसए) यह इसलिए है क्योंकि मोबाइल डेटा बंद है।

जेली बीन में यह है: सेटिंग्स> डेटा उपयोग> मोबाइल डेटा

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

किसी कारण से जब आपका फोन प्रदाता आपको एमएमएस भेजने और प्राप्त करने की क्षमता के साथ सक्षम करता है, तो आपके पास मोबाइल डेटा सक्षम होना चाहिए, भले ही आप वाईफाई का उपयोग कर रहे हों, यदि मोबाइल डेटा सक्षम है तो आप एमएमएस प्राप्त करने और भेजने में सक्षम होंगे, भले ही Wifi आपके डिवाइस पर आपके इंटरनेट के रूप में दिखाई दे रहा है।

यह एक वास्तविक दर्द है, जैसे कि यदि आपके पास यह नहीं है, तो मोबाइल डेटा चालू करते समय भी संदेश बहुत लटका सकता है, और डिवाइस के रिबूट की आवश्यकता हो सकती है।


इसके अलावा आपको पता होना चाहिए कि एक एसएमएस और एमएमएस भेजना पृष्ठभूमि में 2 पूरी तरह से अलग चीजें हैं। MMS इंटरनेट आधारित नेटवर्क सेवा का अधिक हिस्सा है क्योंकि इसमें पाठ के साथ अतिरिक्त आइटम (मीडिया) भेजने की आवश्यकता होती है। दिए गए कोड कुछ उपकरणों पर ठीक काम करते हैं जिन्हें मैंने परीक्षण किया है। ps: आप NOKIA भाग को अनदेखा कर सकते हैं।
मनन शर्मा

जब मैं इस उदाहरण को चलाता हूं, तो LogCat में यह प्रिंट करता है: 02-24 13: 32: 40.872: V / SendMMSActivity (5686): TYPE_MOBILE_MMS जुड़ा नहीं, जमानत 02-24 13: 32: 40.882: V / SendMMSActivity (5686): प्रकार है नहीं TYPE_MOBILE_MMS, जमानत यह भी कहता है: java.lang.SecurityException: APN सेटिंग लिखने की अनुमति नहीं: न तो उपयोगकर्ता 10099 और न ही वर्तमान प्रक्रिया में android.permission.WRITE_APN_ETTETTINGS है। ऐसा लगता है कि यह इस क्वेरी को निष्पादित नहीं कर सकता है: अंतिम कर्सर apnCursor = this.context.getContentResolver ()। क्वेरी (Uri.withAppendedPath (वाहक .CONTENT_URI, "वर्तमान"), अशक्त, अशक्त, अशक्त); एक नेक्सस पर Im परीक्षण 4.
toobsco42

इसके अलावा यह वही उदाहरण है जो @Sahil ने प्रदान किया है।
toobsco42

7

आधिकारिक एपीआई समर्थन नहीं है, जिसका अर्थ है कि यह जनता के लिए प्रलेखित नहीं है और लाइब्रेरी किसी भी समय बदल सकती हैं। मुझे लगता है कि आप आवेदन नहीं छोड़ना चाहते हैं, लेकिन यहां आप इसे किसी और के लिए एक इरादे के साथ कैसे सोच रहे हैं।

public void sendData(int num){
    String fileString = "..."; //put the location of the file here
    Intent mmsIntent = new Intent(Intent.ACTION_SEND);
    mmsIntent.putExtra("sms_body", "text");
    mmsIntent.putExtra("address", num);
    mmsIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(fileString)));
    mmsIntent.setType("image/jpeg");
    startActivity(Intent.createChooser(mmsIntent, "Send"));

}

मुझे पूरी तरह से पता नहीं चला है कि मैसेज की डिलीवरी को कैसे ट्रैक किया जाए लेकिन इसे भेजा जाना चाहिए।

आप उसी तरह एसएमएस की रसीद के लिए सतर्क हो सकते हैं। रिसीवर पर आशय फ़िल्टर इस तरह दिखना चाहिए।

<intent-filter>
    <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
    <data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>

क्या यह सिर्फ देशी मैसेजिंग ऐप लॉन्च नहीं करता है?
टॉब्स्को 42

1
इसके बारे में खेद है। मुझे बस एहसास हुआ कि आप पहले से ही जानते हैं कि यह कैसे करना है। हालांकि मैं कैसे एमएमएस प्राप्त करने के लिए जोड़ दिया।
user1959417

धन्यवाद, मैं हाल ही में एमएमएस का हिस्सा लागू कर रहा हूं BroadcastReceiver, और इसका उपयोग किया हैIntent Filter आपने जो पोस्ट किया है। मैं इस सवाल को जल्द ही अपडेट करूंगा।
टोब्सको 42

4

एपन सेटिंग्स लिखने की अनुमति के बिना एंड्रॉइड 4.0 एपीआई 14 या उच्चतर के लिए एक एमएमएस भेजने के लिए, आप इस लाइब्रेरी का उपयोग कर सकते हैं : एमएनसी को पुनर्प्राप्त करें और एंड्रॉइड से एमसीसी कोड प्राप्त करें, फिर कॉल करें

Carrier c = Carrier.getCarrier(mcc, mnc);
if (c != null) {
    APN a = c.getAPN();
    if (a != null) {
        String mmsc = a.mmsc;
        String mmsproxy = a.proxy; //"" if none
        int mmsport = a.port; //0 if none
    }
}

इसका उपयोग करने के लिए, Jsoup और droid प्रिज्म जार को बिल्ड पथ में जोड़ें, और com.droidprism आयात करें; *


अरे @Sam, मैंने अपने प्रोजेक्ट में .jar फ़ाइल जोड़ी है, लेकिन इस त्रुटि को उस लाइन में लाया जा रहा है जो कैरियर ऑब्जेक्ट को तुरंत कर देती है: java.lang.NoClassDefFoundError: com.droidprism.Carrier क्या आपके साथ ऐसा हो रहा है?
टोब्सको 42

नहीं। आपको बिल्ड पथ में jsoup जोड़ना होगा, बिल्ड पथ पर जार और com.droidprism * आयात करना होगा; मैं उत्तर संपादित करूँगा। एंड्रॉइड में ऐसा करने के लिए, जार को पहले लिबास डायरेक्टरी में जोड़ें, फिर पहले से लिब्स डायरेक्टरी में जार का उपयोग करने के लिए प्रोजेक्ट बिल्ड पथ को कॉन्फ़िगर करें, फिर बिल्ड पाथ कॉन्फिगर पर क्लिक करें ऑर्डर और एक्सपोर्ट पर क्लिक करें और जार के बॉक्स को चेक करें और मूव करें jsoup और droidprism जार बिल्ड ऑर्डर के शीर्ष पर।
सैम एडम्श जूल

Jsoup जोड़ना .jar ने NoClassDefFoundError को हल किया। मैं अब एपीएन सेटिंग्स प्राप्त कर सकता हूं। अगला चरण यह पता लगाना है कि एमएमएस कैसे भेजा जाए।
टोब्स्को 42

3

मुझे नहीं लगता कि एंड्रॉइड में एमएमएस भेजने के लिए कोई एसडीके समर्थन है। यहाँ देखो कम से कम मैं कम से कम पाया है। लेकिन एक लड़के ने इसका दावा किया। इस पोस्ट पर एक नजर।

Android में मेरे आवेदन से एमएमएस भेजें


मैंने Nokia कार्यान्वयन के androidbridge.blogspot.com पोस्ट की टिप्पणियों को देखा, और ऐसा लगता है कि बहुत से लोग अपने उपकरणों पर काम करने के लिए इसे प्राप्त कर रहे हैं।
तोबस्को 42

@ toobsco42 तो, अभी तक इसके लिए कोई समर्थन नहीं हो सकता है।
साहिल महाजन Mj

-2

मैं निराशाओं को नहीं समझता। सिर्फ एक प्रसारणकर्ता क्यों न बनाएं जो इस आशय के लिए फ़िल्टर करता है:

android.provider.Telephony.MMS_RECEIVED

मैंने थोड़ा आगे की जाँच की और इसे (रूट किए गए फोन) प्राप्त करने के लिए आपको सिस्टम लेवल एक्सेस की आवश्यकता हो सकती है।


3
अरे @ j2emanue, समस्या यह है कि यह आशय प्राप्त करने के बाद, आप वास्तव में MMS की सामग्री कैसे प्राप्त करते हैं? यदि किसी MMS में छवि और पाठ है, तो आप इन घटकों को कैसे निकालते हैं।
टॉब्स्को 42

लेकिन मुझे लगता है कि यदि आप इसे जिस तरह से कर सकते हैं, तो आप एक बाइट सरणी प्राप्त कर सकते हैं। मैंने उल्लेख किया है .... बाइट [] डेटा = आशय ।getByteArrayExtra ("डेटा"); मुझे यकीन नहीं है कि हालांकि यह क्षमा करें।
j2emanue

मैं इसे पार्स करने में सक्षम हूं। लेकिन सब मैं प्राप्त कर सकते हैं विषय है, जो एमएमएस से आया है, और सामग्री जहां जहां एमएमएस की सामग्री संग्रहीत है। हालाँकि यह url सुलभ नहीं है।
बोब्स्को 42

-2

SmsListenerClass

public class SmsListener extends BroadcastReceiver {

static final String ACTION =
        "android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context context, Intent intent) {

    Log.e("RECEIVED", ":-:-" + "SMS_ARRIVED");

    // TODO Auto-generated method stub
    if (intent.getAction().equals(ACTION)) {

        Log.e("RECEIVED", ":-" + "SMS_ARRIVED");

        StringBuilder buf = new StringBuilder();
        Bundle bundle = intent.getExtras();
        if (bundle != null) {

            Object[] pdus = (Object[]) bundle.get("pdus");

            SmsMessage[] messages = new SmsMessage[pdus.length];
            SmsMessage message = null;

            for (int i = 0; i < messages.length; i++) {

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    String format = bundle.getString("format");
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format);
                } else {
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                }

                message = messages[i];
                buf.append("Received SMS from  ");
                buf.append(message.getDisplayOriginatingAddress());
                buf.append(" - ");
                buf.append(message.getDisplayMessageBody());
            }

            MainActivity inst = MainActivity.instance();
            inst.updateList(message.getDisplayOriginatingAddress(),message.getDisplayMessageBody());

        }

        Log.e("RECEIVED:", ":" + buf.toString());

        Toast.makeText(context, "RECEIVED SMS FROM :" + buf.toString(), Toast.LENGTH_LONG).show();

    }
}

गतिविधि

@Override
public void onStart() {
    super.onStart();
    inst = this;
}

public static MainActivity instance() {
    return inst;
}

public void updateList(final String msg_from, String msg_body) {

    tvMessage.setText(msg_from + " :- " + msg_body);

    sendSMSMessage(msg_from, msg_body);

}

protected void sendSMSMessage(String phoneNo, String message) {

    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNo, null, message, null, null);
        Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
}

प्रकट

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

<receiver android:name=".SmsListener">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.