दिलचस्प पोस्ट
पहेली गेम में जेपीनेल अपडेट नहीं कर रहा है AppCompat v.7 के साथ ActionBar दिखाने और छिपाने के लिए सीतनिद्रा में होना क्यों कोई तर्क निर्माता की आवश्यकता है? (mysql, php) डेटा डालने से पहले auto_increment फ़ील्ड मान कैसे प्राप्त करें? HTMLFragment में मनमाना HTML डालने Httpclient 4, त्रुटि 302. कैसे पुनर्निर्देशित करें? एंड्रॉइड में एक फ़ाइल बनाने की कोशिश कर रहा है: ओपन विफल: ईआरओएफएस (केवल-पढ़ने के लिए फ़ाइल सिस्टम) ग्रुप द्वारा + केस वक्तव्य एचटीएमएल से पीडीएफ जेनरेट करने के लिए wkhtmltopdf कॉलिंग कैसे ProgressBar अद्यतनों के साथ एक BackgroundWorker को सही ढंग से लागू करने के लिए? MySQL COUNT DISTINCT दो NSString ऑब्जेक्ट की तुलना करते समय "a == b" झूठा है SQLite और साझा वरीयताओं के पेशेवरों और विपक्ष त्रुटि के रूप में चेतावनी – ये कैसे छुटकारा पाने के लिए पर्ल 5.20 और स्मार्ट मिलान का भाग्य और दिया-कब?

Android किटकैट में एमएमएस संदेश प्राप्त करें

तो इस वीडियो एंड्रॉइड 4.4 SMS डेवलपर्स #DevBytes से बताता है कि किटकैट में एसएमएस एपीआई में हालिया बदलाव हैं। वे एक नमूना परियोजना के साथ एक लिंक प्रदान करते हैं http://goo.gl/uQ3Nih

वे सुझाव देते हैं कि आप किसी सेवा में एक एमएमएस प्राप्त करते हैं। जो सभी ठीक दिखते हैं, वे सबसे अनगिनत टुकड़े का उल्लेख करने के लिए उपेक्षा के अलावा। वास्तव में इनकमिंग एमएमएस को कैसे प्रबंधित करें

यहां परियोजना से नमूना है https://gist.github.com/lawloretienne/8970938

मैंने "एमएमएस को संभालना" करने की कोशिश की है

https://gist.github.com/lawloretienne/8971050

मैं इरादा से अतिरिक्त प्राप्त कर सकता हूं, लेकिन एकमात्र सार्थक चीज जिसे मैं एमआरएस भेजा गया था वह नंबर वहन कर सकता है।

क्या कोई मुझे सही दिशा में बता सकता है कि इस बारे में कैसे जाना है?

मैंने देखा कि एक WAP_PUSH_MESSAGE में कुछ चीजें हैं, एक FROM, SUBJECT, और CONTENT_LOCATION

सामग्री स्थान यूआरएल प्रतीत होता है जहां एमएमएस की सामग्री समाहित होती है। मैं इसे कैसे पहुंचा सकता हूं?

यहां उस URL का उदाहरण दिया गया है

https://atl1mmsget.msg.eng.t-mobile.com/mms/wapenc?location=XXXXXXXXXXX_14zbwk&rid=027

जहां X एक डिवाइस के फोन नंबर में अंक है I पर परीक्षण कर रहा हूं।

ऐसा लगता है कि अमेरिका में टी-मोबाइल के लिए एमएमएससी (मल्टीमीडिया संदेश सेवा केंद्र) http://mms.msg.eng.t-mobile.com/mms/wapenc

इस सूची के अनुसार: http://www.activexperts.com/xmstoolkit/mmsclist/

Solutions Collecting From Web of "Android किटकैट में एमएमएस संदेश प्राप्त करें"

इसमें शून्य प्रलेखन है इसलिए यहां कुछ मदद के लिए जानकारी दी गई है।

1) com.google.android.mms.pdu स्रोत से आपको पीडू यूटील्स की ज़रूरत है

2) आपको आने वाली एमएमएस प्रसारण (Intent.getByteArrayExtra ("डेटा") से अतिरिक्त सूचनाएं बाइट सरणी से प्राप्त होती हैं।

3) अधिसूचना को एक जेनेरिक पीड्यू (नया पीडुपरर्स (कच्चा पीडु)। पार्स () में पुश करें।

4) वाहक के वैप सर्वर से संवाद करने के लिए आपको ट्रांसनेक्शन सेटिंग की आवश्यकता होगी। मुझे # 5 के बाद लेनदेन की सेटिंग्स मिलती हैं I मैं उपयोग करता हूं:

 TransactionSettings transactionSettings = new TransactionSettings(mContext, mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS).getExtraInfo()); 

5) वाईफाई पर नेटवर्क पर दबाव डालें मैं निम्नलिखित का उपयोग करता हूँ

 private boolean beginMmsConnectivity() { try { int result = mConnMgr.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS); NetworkInfo info = mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS); boolean isAvailable = info != null && info.isConnected() && result == Phone.APN_ALREADY_ACTIVE && !Phone.REASON_VOICE_CALL_ENDED.equals(info.getReason()); return isAvailable; } catch(Exception e) { return false; } } 

6) फिर आपको मेजबान के लिए मार्ग सुनिश्चित करना होगा।

 private static void ensureRouteToHost(ConnectivityManager cm, String url, TransactionSettings settings) throws IOException { int inetAddr; if (settings.isProxySet()) { String proxyAddr = settings.getProxyAddress(); inetAddr = lookupHost(proxyAddr); if (inetAddr == -1) { throw new IOException("Cannot establish route for " + url + ": Unknown host"); } else { if (!cm.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_MMS, inetAddr)) throw new IOException("Cannot establish route to proxy " + inetAddr); } } else { Uri uri = Uri.parse(url); inetAddr = lookupHost(uri.getHost()); if (inetAddr == -1) { throw new IOException("Cannot establish route for " + url + ": Unknown host"); } else { if (!cm.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_MMS, inetAddr)) throw new IOException("Cannot establish route to " + inetAddr + " for " + url); } } } 

यहां लुकअप हॉस्ट विधि है:

 private static int lookupHost(String hostname) { InetAddress inetAddress; try { inetAddress = InetAddress.getByName(hostname); } catch (UnknownHostException e) { return -1; } byte[] addrBytes; int addr; addrBytes = inetAddress.getAddress(); addr = ((addrBytes[3] & 0xff) << 24) | ((addrBytes[2] & 0xff) << 16) | ((addrBytes[1] & 0xff) << 8) | (addrBytes[0] & 0xff); return addr; } 

मैं सुधरे हुए सुधार के लिए एक प्रतिबिंब आधारित पद्धति का उपयोग करना चाहूंगा।

 private static void ensureRouteToHostFancy(ConnectivityManager cm, String url, TransactionSettings settings) throws IOException, NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Method m = cm.getClass().getMethod("requestRouteToHostAddress", new Class[] { int.class, InetAddress.class }); InetAddress inetAddr; if (settings.isProxySet()) { String proxyAddr = settings.getProxyAddress(); try { inetAddr = InetAddress.getByName(proxyAddr); } catch (UnknownHostException e) { throw new IOException("Cannot establish route for " + url + ": Unknown proxy " + proxyAddr); } if (!(Boolean) m.invoke(cm, new Object[] { ConnectivityManager.TYPE_MOBILE_MMS, inetAddr })) throw new IOException("Cannot establish route to proxy " + inetAddr); } else { Uri uri = Uri.parse(url); try { inetAddr = InetAddress.getByName(uri.getHost()); } catch (UnknownHostException e) { throw new IOException("Cannot establish route for " + url + ": Unknown host"); } if (!(Boolean) m.invoke(cm, new Object[] { ConnectivityManager.TYPE_MOBILE_MMS, inetAddr })) throw new IOException("Cannot establish route to " + inetAddr + " for " + url); } } 

7) मेजबान के लिए मार्ग सुनिश्चित करने के बाद आपको स्रोत से एचटीटीपी यूटीएल की आवश्यकता हो सकती है। मैंने बेहतर संचार के लिए ओएचएचटीपी का उपयोग करके अपने कार्यान्वयन को भारी रूप से संशोधित किया है।

 byte[] rawPdu = HttpUtils.httpConnection(mContext, mContentLocation, null, HttpUtils.HTTP_GET_METHOD, mTransactionSettings.isProxySet(), mTransactionSettings.getProxyAddress(), mTransactionSettings.getProxyPort()); 

8) उत्पन्न बाइट सरणी से जेडिकपीड्यू को पार्स करने के लिए पीडुपरर्स का उपयोग करें। तब आप शरीर को निकाल सकते हैं और एक मल्टीमीडिया मेसेज पीडीयू में डाल सकते हैं।

9) फिर आप पीडीयू के कुछ हिस्सों को दोहरा सकते हैं।

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

 private HashSet<String> getRecipients(GenericPdu pdu) { PduHeaders header = pdu.getPduHeaders(); HashMap<Integer, EncodedStringValue[]> addressMap = new HashMap<Integer, EncodedStringValue[]>(ADDRESS_FIELDS.length); for (int addrType : ADDRESS_FIELDS) { EncodedStringValue[] array = null; if (addrType == PduHeaders.FROM) { EncodedStringValue v = header.getEncodedStringValue(addrType); if (v != null) { array = new EncodedStringValue[1]; array[0] = v; } } else { array = header.getEncodedStringValues(addrType); } addressMap.put(addrType, array); } HashSet<String> recipients = new HashSet<String>(); loadRecipients(PduHeaders.FROM, recipients, addressMap, false); loadRecipients(PduHeaders.TO, recipients, addressMap, true); return recipients; } 

यहां लोड प्राप्तकर्ता विधि है:

 private void loadRecipients(int addressType, HashSet<String> recipients, HashMap<Integer, EncodedStringValue[]> addressMap, boolean excludeMyNumber) { EncodedStringValue[] array = addressMap.get(addressType); if (array == null) { return; } // If the TO recipients is only a single address, then we can skip loadRecipients when // we're excluding our own number because we know that address is our own. if (excludeMyNumber && array.length == 1) { return; } String myNumber = excludeMyNumber ? mTelephonyManager.getLine1Number() : null; for (EncodedStringValue v : array) { if (v != null) { String number = v.getString(); if ((myNumber == null || !PhoneNumberUtils.compare(number, myNumber)) && !recipients.contains(number)) { // Only add numbers which aren't my own number. recipients.add(number); } } } } 

यहां बताया गया है कि मल्टिमीडियाएमसेज पीडीए भागों को कैसे पुनरावृत्त करना है।

 private void processPduAttachments() throws Exception { if (mGenericPdu instanceof MultimediaMessagePdu) { PduBody body = ((MultimediaMessagePdu) mGenericPdu).getBody(); if (body != null) { int partsNum = body.getPartsNum(); for (int i = 0; i < partsNum; i++) { try { PduPart part = body.getPart(i); if (part == null || part.getData() == null || part.getContentType() == null || part.getName() == null) continue; String partType = new String(part.getContentType()); String partName = new String(part.getName()); Log.d("Part Name: " + partName); Log.d("Part Type: " + partType); if (ContentType.isTextType(partType)) { } else if (ContentType.isImageType(partType)) { } else if (ContentType.isVideoType(partType)) { } else if (ContentType.isAudioType(partType)) { } } catch (Exception e) { e.printStackTrace(); // Bad part shouldn't ruin the party for the other parts } } } } else { Log.d("Not a MultimediaMessagePdu PDU"); } } 

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