2011-12-23 28 views
26

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

public void deleteSMS(Context context, String message, String number) { 
    try { 
     mLogger.logInfo("Deleting SMS from inbox"); 
     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = context.getContentResolver().query(uriSms, 
      new String[] { "_id", "thread_id", "address", 
       "person", "date", "body" }, null, null, null); 

     if (c != null && c.moveToFirst()) { 
      do { 
       long id = c.getLong(0); 
       long threadId = c.getLong(1); 
       String address = c.getString(2); 
       String body = c.getString(5); 

       if (message.equals(body) && address.equals(number)) { 
        mLogger.logInfo("Deleting SMS with id: " + threadId); 
        context.getContentResolver().delete(
         Uri.parse("content://sms/" + id), null, null); 
       } 
      } while (c.moveToNext()); 
     } 
    } catch (Exception e) { 
     mLogger.logError("Could not delete SMS from inbox: " + e.getMessage()); 
    } 
} 
+0

संभावित डुप्लिकेट [प्रोग्राम में एंड्रॉइड में इनबॉक्स से एक एसएमएस कैसे हटाएं?] (Http://stackoverflow.com/questions/419184/how-to-delete-an-sms-from-the-inbox-in -android- प्रोग्रामेटिक रूप से) –

+1

@ मार्क्लिन दोनों प्रश्न अलग हैं। इस प्रश्न में एसएमएस को ग्रहण से सीधे तैनात किया गया है, लेकिन मार्कर्ट स्थान –

+0

@ सुनीकुमार साहू से नहीं: आप सही हैं। कोड पूरी तरह से काम करता है, लेकिन केवल अगर डिवाइस पीसी से कनेक्ट है, न कि बाजार से डाउनलोड किया गया है और मैं समझने की कोशिश क्यों कर रहा हूं? – Florian

उत्तर

24

वास्तव में, अपनी पोस्ट में कोड 100% सही है। समस्या यह थी कि एंड्रॉइड को इसे प्राप्त करने पर एसएमएस स्टोर करने के लिए कुछ समय चाहिए। तो समाधान केवल एक हैंडलर जोड़ने और 1 या 2 सेकंड के लिए हटाने के अनुरोध में देरी है।

यह वास्तव में पूरे मुद्दे को हल करता है।

संपादित करें (Maksim Dmitriev करने के लिए धन्यवाद):

कृपया विचार है कि यदि आप Android 4.4 के साथ उपकरणों पर एसएमएस संदेश नहीं हटा सकते।

इसके अलावा, सिस्टम अब केवल डिफ़ॉल्ट ऐप को प्रदाता को संदेश डेटा लिखने की अनुमति देता है, हालांकि अन्य ऐप्स किसी भी समय पढ़ सकते हैं।

http://developer.android.com/about/versions/kitkat.html

अगर आप कोशिश कोई अपवाद फेंक दिया जाएगा; कुछ भी नहीं हटाया जाएगा। मैंने अभी दो अनुकरणकों पर इसका परीक्षण किया है।

How to send SMS messages programmatically

+0

तो एंड्रॉइड 4.4 में संदेश भेजने और इनबॉक्स में दिखाने के लिए कोई रास्ता नहीं है ?? –

+0

@Florian आपने अपनी समस्या का समाधान किया? – Erum

1
private int deleteMessage(Context context, SmsMessage msg) { 
    Uri deleteUri = Uri.parse("content://sms"); 
    int count = 0; 
    Cursor c = context.getContentResolver().query(deleteUri, null, null, 
      null, null); 
    while (c.moveToNext()) { 
     try { 
      // Delete the SMS 
      String pid = c.getString(0); // Get id; 
      String uri = "content://sms/" + pid; 
      count = context.getContentResolver().delete(Uri.parse(uri), 
        null, null); 
     } catch (Exception e) { 
     } 
    } 
    return count; 
} 

use this code............. 

या

getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null); 
+0

यदि आप मेरे कोड पर नजदीकी नजर रखते हैं तो आप देखते हैं कि यह वही है जो मैं कर रहा हूं। मेरा कोड पूरी तरह से काम करता है अगर डिवाइस एडीबी के साथ पीसी से जुड़ा हुआ है और यदि मैं इसे सीधे तैनात करता हूं। – Florian

7

हे अनुकूलित एसएमएस नष्ट करने के लिए 1. तिथि 2. करके इस कोड का उपयोग संख्या 3. करके शरीर द्वारा

try { 
     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = context.getContentResolver().query(
       uriSms, 
       new String[] { "_id", "thread_id", "address", "person", 
         "date", "body" }, "read=0", null, null); 

     if (c != null && c.moveToFirst()) { 
      do { 
       long id = c.getLong(0); 
       long threadId = c.getLong(1); 
       String address = c.getString(2); 
       String body = c.getString(5); 
       String date = c.getString(3); 
       Log.e("log>>>", 
         "0--->" + c.getString(0) + "1---->" + c.getString(1) 
           + "2---->" + c.getString(2) + "3--->" 
           + c.getString(3) + "4----->" + c.getString(4) 
           + "5---->" + c.getString(5)); 
       Log.e("log>>>", "date" + c.getString(0)); 

       ContentValues values = new ContentValues(); 
       values.put("read", true); 
       getContentResolver().update(Uri.parse("content://sms/"), 
         values, "_id=" + id, null); 

       if (message.equals(body) && address.equals(number)) { 
        // mLogger.logInfo("Deleting SMS with id: " + threadId); 
        context.getContentResolver().delete(
          Uri.parse("content://sms/" + id), "date=?", 
          new String[] { c.getString(4) }); 
        Log.e("log>>>", "Delete success........."); 
       } 
      } while (c.moveToNext()); 
     } 
    } catch (Exception e) { 
     Log.e("log>>>", e.toString()); 
    } 
+0

यह Stackoverflow.com में सबसे अच्छा कोड है। धन्यवाद। –

9

कृपया विचार है कि आप एसएमएस नहीं हटा सकते हैं एंड्रॉइड 4.4 के साथ उपकरणों पर संदेश।

इसके अलावा, सिस्टम अब केवल डिफ़ॉल्ट ऐप को प्रदाता को संदेश डेटा लिखने की अनुमति देता है, हालांकि अन्य ऐप्स किसी भी समय पढ़ सकते हैं।

http://developer.android.com/about/versions/kitkat.html

अगर आप कोशिश कोई अपवाद फेंक दिया जाएगा; कुछ भी नहीं हटाया जाएगा। मैंने अभी दो अनुकरणकों पर इसका परीक्षण किया है।

How to send SMS messages programmatically

+0

अच्छा भगवान, मैं उस घंटों की खोज कर रहा था। धन्यवाद! –

2

आप जो ऐप्लिकेशन चुन सकते हैं 4.4+ में डिफ़ॉल्ट SMS ऐप है और यह रूप में अच्छी तरह से एसएमएस को नष्ट करने में सक्षम हो जाएगा अपने अनुप्रयोग डिफ़ॉल्ट के रूप में सेट किया गया है।

2

ऐप को डिफ़ॉल्ट ऐप see this के रूप में बनाने के लिए।

public void deleteSMS(Context context,int position) 
{ 
    Uri deleteUri = Uri.parse("content://sms"); 
    int count = 0; 
    Cursor c = context.getContentResolver().query(deleteUri, null, null, 
      null, null); 
    while (c.moveToNext()) { 
     try { 
      // Delete the SMS 
      String pid = c.getString(0); // Get id; 
      String uri = "content://sms/" + pid; 
      count = context.getContentResolver().delete(Uri.parse(uri), 
        null, null); 
     } catch (Exception e) { 
     } 
    } 
    } 

यह सभी (इनबॉक्स, आउटबॉक्स, ड्राफ्ट) एसएमएस को हटा देता है।

+0

बस 'context.getContentResolver() नहीं हटाएगा (हटाएं, हटाएं, शून्य, शून्य);' सभी एसएमएस भी हटाएं? –

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