2012-02-03 3 views
10

पर कक्षा 0 एसएमएस (फ्लैश एसएमएस) जैसा कि मुझे पता है कि नोकिया और कुछ अन्य फोन (जैसे आईफोन) कक्षा 0 एसएमएस भेजने और प्राप्त करने में सक्षम हैं, क्या यह एंड्रॉइड के लिए संभव है? एंड्रॉइड एपीआई है?एंड्रॉइड

फ्लैश एसएमएस क्या है?

फ्लैश एसएमएस एक एसएमएस है जो तुरंत आगमन पर फोन स्क्रीन पर प्रदर्शित होता है।

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

यदि एक फोन पर कई फ्लैश संदेश भेजे जाते हैं, तो केवल नवीनतम संदेश प्रदर्शित किया जाएगा, और पिछले सभी को ओवरराइट किया जाएगा।

कक्षा 0: इंगित करता है कि यह संदेश तुरंत एमएस पर प्रदर्शित होना है और एक संदेश वितरण रिपोर्ट एससी को वापस भेजनी है। संदेश को एमएस या सिम कार्ड पर सहेजना नहीं है (जब तक कि मोबाइल उपयोगकर्ता द्वारा ऐसा करने के लिए चयनित नहीं किया जाता)।

+2

अरे, क्या आपको पता है कि अन्य तीन वर्गों का क्या अर्थ है?मैं लगभग दो घंटे खोज रहा हूं, लेकिन मुझे कोई चीज़ नहीं मिल रही है। – harshit

उत्तर

8

जड़ें Android के लिए यह एक एपीआई बाईपास और कक्षा भेज 0 एसएमएस करने के लिए संभव है। वहाँ एक परियोजना Git पर हब ZeroSMS कहा जाता है:

ZeroSMS एंड्रॉयड> = 2.3 पर क्लास 0 एसएमएस भेजने के लिए एक तरह से प्रदर्शित किया कि एक-का-प्रमाण अवधारणा है।

नोटः यह केवल संस्करण 2.2 पर काम करता है -> 4.1.2, sendRawPdu विधि, हटा दिया गया था, ताकि आप यह करने के लिए एक नया तरीका खोजने की जरूरत होगी।

+0

नाइस के बाद काम नहीं करेगा। इसे – xDragonZ

+1

के रूप में चुना गया यह केवल साइनोजनमोड रोम पर काम करता है, क्योंकि इसे साइनोजनमोड कॉर्ट के साथ एपीके पर हस्ताक्षर करने की आवश्यकता होती है। – chuacw

+0

मैंने अपने रूट किए गए फोन पर शून्य एसएमएस ऐप इंस्टॉल करने का प्रयास किया, लेकिन स्थापना दोनों हस्ताक्षरित और सामान्य एपीके के लिए विफल रही। क्या यह शून्य एसएमएस केवल साइनोजनमोड के साथ काम करेगा? मुझे किटकैट संस्करण के लिए इसकी ज़रूरत है – Viral

1

हां और नहीं। क्या यह आसानी से संभव है? नहीं। क्या यह तकनीकी रूप से टॉमफूलरी के साथ संभव है (पढ़ें: प्रतिबिंब)? Usually

6

एंड्रॉइड 2.2 से पहले फ्लैश एसएमएस (कक्षा 0 एसएमएस के लिए यह शब्द) भेजना संभव था। Google ने sendRawPdu API को हटा दिया है, इसलिए यदि आप प्रतिबिंब का उपयोग करते हैं, तो भी आप इसे करने में सक्षम नहीं होंगे।

यहाँ कैसे मैं इसे पहले किया था (यह एंड्रॉयड 1.6 पर परीक्षण किया गया था और काम किया)

private void sendSms(String phone, String sms) { 
    if ((phone == null) || (sms == null) || (phone.length() == 0) 
      || (sms.length() == 0)) { 
     String message = "Phone or message empty!!!"; 
     Toast notification = Toast.makeText(getBaseContext(), message, 
       Toast.LENGTH_SHORT); 
     notification.show(); 
     return; 
    } 

    // SecurityManager oldSM = System.getSecurityManager(); 
    // MySecurityManager newSM = new MySecurityManager(); 
    // System.setSecurityManager(newSM); 

    // ServiceManager.getService("isms") 
    // ServiceManager.getService("isms"); 

    SmsManager m = SmsManager.getDefault(); 
    PendingIntent sentIntent = PendingIntent 
      .getBroadcast(this, 0, new Intent(
        MessageStatusReceiver_MESSAGE_STATUS_RECEIVED_ACTION), 
        0); 

    PendingIntent deliveryIntent = PendingIntent.getBroadcast(this, 0, 
      new Intent(SmsReceiverService_MESSAGE_SENT_ACTION), 0); 

    // String sms = "Message self-destroyed!!!"; 
    // String phone = "93634096"; 

    long NOW = System.currentTimeMillis(); 
    String time = String.valueOf(NOW); 

    // // m.sendTextMessage(phone, null, sms, sentIntent, deliveryIntent); 
    // working // m.sendTextMessage(phone, null, sms, null, null); 
    byte[] bb = new byte[1]; 
    Method m2 = null; 
    try { 
     m2 = SmsManager.class.getDeclaredMethod("sendRawPdu", 
       bb.getClass(), bb.getClass(), PendingIntent.class, 
       PendingIntent.class); 
    } catch (SecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    // send message 

    SmsMessage.SubmitPdu pdus = SmsMessage.getSubmitPdu(null, phone, sms, 
      false); 

    // http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=telephony/java/android/telephony/gsm/SmsMessage.java;h=9ccfa90d2e24e5caea26c1deac641b3c31ae56d4;hb=c883b143ba2b8bfe2f2033d00dee9ff733f1b59c 

    boolean submitted = false; 
    try { 
     byte[] encodedMessage = pdus.encodedMessage; 
     // byte[0] = mtiByte 
     // byte[1] = TP Message Reference 
     // byte[2] = length of source phone 
     // byte[3..length] = phone 
     // protocol identifier 
     int msgLen = encodedMessage[2]/2; 
     // +2 -> length of source phone 
     // +2 -> for 91 after the length 
     // +1 -> TP PID 
     int indexTPDCS = msgLen + 5; 
     byte TPDCS = encodedMessage[indexTPDCS]; 
     // System.out.println(TPDCS); 
     System.out.println(getHexString(encodedMessage)); 
     byte[] changedMessage = encodedMessage.clone(); 
     // Set bit 4 to 1 using OR (|), indicating there is a message class 
     // Set bit 0 and 1 to 0 using AND (&), indicating class 0 
     byte newTPDCS = (byte) ((TPDCS | 0x10) & 0xFC); // Flash SMS 
     changedMessage[indexTPDCS] = newTPDCS; // Class 0 
     System.out.println(getHexString(changedMessage)); 
     // Log.d(SmsScheduler_TAG, getHexString(changedMessage)); 
     boolean send = true; 
     if (send) { 
      m2.invoke(m, pdus.encodedScAddress, changedMessage, null, null); 

      // sendSMS(HexDump.bytesToHexString(pdus.encodedScAddress), 
      // HexDump.bytesToHexString(changedMessage), null); 

      String message = "Flash SMS sent to " + phone 
        + " successfully!"; 
      Toast notification = Toast.makeText(getBaseContext(), message, 
        Toast.LENGTH_SHORT); 
      notification.show(); 
      Log.d(SmsScheduler_TAG, message); 
      submitted = true; 
     } 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

      // not essential, saves the SMS sent. 
    if (submitted) { 
     ContentValues values = new ContentValues(); 
     values.put(ADDRESS, phone); 
     values.put(DATE, time); 
     values.put(READ, 0); 
     values.put(STATUS, -1); 
     values.put(TYPE, MESSAGE_TYPE_SENT); 
     values.put(BODY, sms); 

     Uri inserted = getContentResolver().insert(
       Uri.parse("content://sms"), values); 
    } 

    // System.setSecurityManager(oldSM); 

} 
+0

ठीक है, मैं इसे उत्तर के रूप में चुनूंगा क्योंकि यह एंड्रॉइड 2.2 – xDragonZ

2

Scrool का जवाब वास्तव में सही है, https://stackoverflow.com/a/12873325/3082310, क्योंकि शून्य एसएमएस फ्लैश एसएमएस भेजता है; हालांकि, यह एक सबूत ऑफ कॉन्सेप्ट है और केवल 7-बिट एन्कोडिंग के साथ एसएमएस का समर्थन करता है।

उचित इनकोडिंग के लिए ऐसा लगता है कोड को संशोधित करने और अगर-तो या स्विच मामले बयान को जोड़ने के लिए की जरूरत है: 7 बिट कोडिंग के लिए, के रूप में अंग्रेज़ी

उपयोग (byte)0xF0

में 16 -बिट एन्कोडिंग, यूसीएस -2 एन्कोडिंग

उपयोग (byte) 0x18

अन्यथा, जंक वर्ण दिखाई देते हैं यदि आप असमर्थित भाषा दर्ज करें।