दिलचस्प पोस्ट
विंडो का आकार बदलने पर jQuery एरो ऑपरेटर (->) सी में उपयोग क्या दो डाइक्ट्स को जोड़ने के लिए कोई अजगर तरीका है (दोनों में दिखाई देने वाली कुंजी के लिए मान जोड़ना)? कोड और मार्क-अप के लिए उदाहरण छवियां क्यूए और डॉस बैच में तार्किक ऑपरेटरों ("और", "या") केवल एक विशिष्ट तत्व के लिए बाहरी सीएसएस की सीमा का दायरा? पुनरावर्तन को समझना आप एक विंडोज़ फार्म (सी #) पर एनिमेटेड जीआईएफ कैसे दिखाते हैं RescaleOp का उपयोग कर छवि का आकार कैसे सेट करें लेखांकन आवेदन डॉलर राशि के लिए फ्लोट या दशमलव का उपयोग करें? PHP में स्क्रिप्ट निष्पादन समय को ट्रैक करना क्या नोडजेएस वास्तव में एक-थ्रेडेड है? मैं PHP में file_get_contents () फ़ंक्शन की चेतावनी कैसे संभाल सकता हूं? awk जगह में संशोधन को बचाने MySQL में अंतर को वैकल्पिक

मैं एंड्रॉइड में प्रोग्राम से प्रोग्राम से एसएमएस संदेश कैसे पढ़ सकता हूं?

मैं डिवाइस से एसएमएस संदेशों को पुनः प्राप्त करना चाहता हूं और उन्हें प्रदर्शित करना चाहता हूं?

वेब के समाधान से एकत्रित समाधान "मैं एंड्रॉइड में प्रोग्राम से प्रोग्राम से एसएमएस संदेश कैसे पढ़ सकता हूं?"

इनबॉक्स में मौजूद एसएमएस को पढ़ने के लिए सामग्री रिज़ॉल्वर ( "सामग्री: // एसएमएस / इनबॉक्स" ) का उपयोग करें

// public static final String INBOX = "content://sms/inbox"; // public static final String SENT = "content://sms/sent"; // public static final String DRAFT = "content://sms/draft"; Cursor cursor = getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null); if (cursor.moveToFirst()) { // must check the result to prevent exception do { String msgData = ""; for(int idx=0;idx<cursor.getColumnCount();idx++) { msgData += " " + cursor.getColumnName(idx) + ":" + cursor.getString(idx); } // use msgData } while (cursor.moveToNext()); } else { // empty box, no SMS } 

कृपया READ_SMS अनुमति जोड़ें।

मुझे उम्मीद है यह मदद करेगा 🙂

यह एक तुच्छ प्रक्रिया है आप स्रोत कोड SMSPopup में एक अच्छा उदाहरण देख सकते हैं

निम्न विधियों की जांच करें:

 SmsMmsMessage getSmsDetails(Context context, long ignoreThreadId, boolean unreadOnly) long findMessageId(Context context, long threadId, long _timestamp, int messageType void setMessageRead(Context context, long messageId, int messageType) void deleteMessage(Context context, long messageId, long threadId, int messageType) 

यह पढ़ने के लिए विधि है:

 SmsMmsMessage getSmsDetails(Context context, long ignoreThreadId, boolean unreadOnly) { String SMS_READ_COLUMN = "read"; String WHERE_CONDITION = unreadOnly ? SMS_READ_COLUMN + " = 0" : null; String SORT_ORDER = "date DESC"; int count = 0; // Log.v(WHERE_CONDITION); if (ignoreThreadId > 0) { // Log.v("Ignoring sms threadId = " + ignoreThreadId); WHERE_CONDITION += " AND thread_id != " + ignoreThreadId; } Cursor cursor = context.getContentResolver().query( SMS_INBOX_CONTENT_URI, new String[] { "_id", "thread_id", "address", "person", "date", "body" }, WHERE_CONDITION, null, SORT_ORDER); if (cursor != null) { try { count = cursor.getCount(); if (count > 0) { cursor.moveToFirst(); // String[] columns = cursor.getColumnNames(); // for (int i=0; i<columns.length; i++) { // Log.v("columns " + i + ": " + columns[i] + ": " + cursor.getString(i)); // } long messageId = cursor.getLong(0); long threadId = cursor.getLong(1); String address = cursor.getString(2); long contactId = cursor.getLong(3); String contactId_string = String.valueOf(contactId); long timestamp = cursor.getLong(4); String body = cursor.getString(5); if (!unreadOnly) { count = 0; } SmsMmsMessage smsMessage = new SmsMmsMessage(context, address, contactId_string, body, timestamp, threadId, count, messageId, SmsMmsMessage.MESSAGE_TYPE_SMS); return smsMessage; } } finally { cursor.close(); } } return null; } 
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { final String myPackageName = getPackageName(); if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) { Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, myPackageName); startActivityForResult(intent, 1); }else { List<Sms> lst = getAllSms(); } }else { List<Sms> lst = getAllSms(); } 

एप्लिकेशन को डिफ़ॉल्ट SMS ऐप के रूप में सेट करें

  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if (resultCode == RESULT_OK) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { final String myPackageName = getPackageName(); if (Telephony.Sms.getDefaultSmsPackage(mActivity).equals(myPackageName)) { List<Sms> lst = getAllSms(); } } } } } 

एसएमएस पाने के लिए फ़ंक्शन

 public List<Sms> getAllSms() { List<Sms> lstSms = new ArrayList<Sms>(); Sms objSms = new Sms(); Uri message = Uri.parse("content://sms/"); ContentResolver cr = mActivity.getContentResolver(); Cursor c = cr.query(message, null, null, null, null); mActivity.startManagingCursor(c); int totalSMS = c.getCount(); if (c.moveToFirst()) { for (int i = 0; i < totalSMS; i++) { objSms = new Sms(); objSms.setId(c.getString(c.getColumnIndexOrThrow("_id"))); objSms.setAddress(c.getString(c .getColumnIndexOrThrow("address"))); objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body"))); objSms.setReadState(c.getString(c.getColumnIndex("read"))); objSms.setTime(c.getString(c.getColumnIndexOrThrow("date"))); if (c.getString(c.getColumnIndexOrThrow("type")).contains("1")) { objSms.setFolderName("inbox"); } else { objSms.setFolderName("sent"); } lstSms.add(objSms); c.moveToNext(); } } // else { // throw new RuntimeException("You have no SMS"); // } c.close(); return lstSms; } 

एसएमएस कक्षा नीचे है:

 public class Sms{ private String _id; private String _address; private String _msg; private String _readState; //"0" for have not read sms and "1" for have read sms private String _time; private String _folderName; public String getId(){ return _id; } public String getAddress(){ return _address; } public String getMsg(){ return _msg; } public String getReadState(){ return _readState; } public String getTime(){ return _time; } public String getFolderName(){ return _folderName; } public void setId(String id){ _id = id; } public void setAddress(String address){ _address = address; } public void setMsg(String msg){ _msg = msg; } public void setReadState(String readState){ _readState = readState; } public void setTime(String time){ _time = time; } public void setFolderName(String folderName){ _folderName = folderName; } } 

अपने AndroidManifest.xml में अनुमति को परिभाषित करने के लिए मत भूलना

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

यह पोस्ट थोड़ा सा पुराना है, लेकिन एंड्रॉइड में SMS कंटेंट प्रदाता से संबंधित डेटा प्राप्त करने के लिए यहां एक आसान उपाय है:

इस लिपि का उपयोग करें: https://github.com/EverythingMe/easy-content-providers

  • सभी SMS प्राप्त करें:

     TelephonyProvider telephonyProvider = new TelephonyProvider(context); List<Sms> smses = telephonyProvider.getSms(Filter.ALL).getList(); 

    प्रत्येक एसएमएस के पास सभी फ़ील्ड हैं, ताकि आप किसी भी जानकारी को प्राप्त कर सकते हैं जो आपको चाहिए:
    पता, शरीर, प्राप्त दिनांक, प्रकार (INBOX, SENT, ड्राफ्ट, ..), धागा आईडी, …

  • जेल सभी MMS :

     List<Mms> mmses = telephonyProvider.getMms(Filter.ALL).getList(); 
  • जेल सभी Thread :

     List<Thread> threads = telephonyProvider.getThreads().getList(); 
  • जेल सभी Conversation :

     List<Conversation> conversations = telephonyProvider.getConversations().getList(); 

यह List या Cursor साथ काम करता है और यह देखने के लिए एक नमूना एप्लिकेशन है कि यह कैसा दिखता है और कैसे काम करता है।

वास्तव में, सभी एंड्रॉइड सामग्री प्रदाताओं जैसे संपर्क, कॉल लॉग, कैलेंडर, … के लिए एक समर्थन है सभी विकल्पों के साथ पूर्ण डॉक्टर: https://github.com/EverythingMe/easy-content-providers/wiki/Android- प्रदाताओं

आशा है कि यह भी मदद की 🙂

एपीआई 19 से आप उसके लिए टेलीफोनी क्लास का इस्तेमाल कर सकते हैं; चूंकि कड़ी मेहनत के मूल्य हर डिवाइस में संदेश प्राप्त नहीं करेंगे क्योंकि सामग्री प्रदाता उरी उपकरणों और निर्माताओं से बदलता है।

 public void getAllSms(Context context) { ContentResolver cr = context.getContentResolver(); Cursor c = cr.query(Telephony.Sms.CONTENT_URI, null, null, null, null); int totalSMS = 0; if (c != null) { totalSMS = c.getCount(); if (c.moveToFirst()) { for (int j = 0; j < totalSMS; j++) { String smsDate = c.getString(c.getColumnIndexOrThrow(Telephony.Sms.DATE)); String number = c.getString(c.getColumnIndexOrThrow(Telephony.Sms.ADDRESS)); String body = c.getString(c.getColumnIndexOrThrow(Telephony.Sms.BODY)); Date dateFormat= new Date(Long.valueOf(smsDate)); String type; switch (Integer.parseInt(c.getString(c.getColumnIndexOrThrow(Telephony.Sms.TYPE)))) { case Telephony.Sms.MESSAGE_TYPE_INBOX: type = "inbox"; break; case Telephony.Sms.MESSAGE_TYPE_SENT: type = "sent"; break; case Telephony.Sms.MESSAGE_TYPE_OUTBOX: type = "outbox"; break; default: break; } c.moveToNext(); } } } else { Toast.makeText(this, "No message to show!", Toast.LENGTH_SHORT).show(); } } 

चरण 1: सबसे पहले हमें मैनिफेस्ट फाइल में अनुमतियां जोड़नी हैं जैसे <uses-permission android:name="android.permission.RECEIVE_SMS"android:protectionLevel="signature" /> <uses-permission android:name="android.permission.READ_SMS" />

चरण 2: एसएमएस प्राप्त करने के लिए सेवा एसएमएस रिसीवर वर्ग जोड़ें

  <receiver android:name="com.aquadeals.seller.services.SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> 

चरण 3: रन टाइम अनुमति जोड़ें

  private boolean checkAndRequestPermissions() { int sms = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS); int loc = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); int loc2 = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION); List<String> listPermissionsNeeded = new ArrayList<>(); if (sms != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(Manifest.permission.READ_SMS); } if (loc != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(android.Manifest.permission.ACCESS_FINE_LOCATION); } if (loc2 != PackageManager.PERMISSION_GRANTED) { listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION); } if (!listPermissionsNeeded.isEmpty()) { ActivityCompat.requestPermissions(this,listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS); return false; } return true; } 

चरण 4: अपने ऐप और टेस्ट इंटरफ़ेस कक्षा में इस कक्षा को जोड़ें

 public interface SmsListener{ public void messageReceived(String messageText);} 

SmsReceiver.java

  public class SmsReceiver extends BroadcastReceiver { private static SmsListener mListener; public Pattern p = Pattern.compile("(|^)\\d{6}"); @Override public void onReceive(Context context, Intent intent) { Bundle data = intent.getExtras(); Object[] pdus = (Object[]) data.get("pdus"); for(int i=0;i<pdus.length;i++) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]); String sender = smsMessage.getDisplayOriginatingAddress(); String phoneNumber = smsMessage.getDisplayOriginatingAddress(); String senderNum = phoneNumber ; String messageBody = smsMessage.getMessageBody(); try { if(messageBody!=null){ Matcher m = p.matcher(messageBody); if(m.find()) { mListener.messageReceived(m.group(0)); } else {}} } catch(Exception e){} } } public static void bindListener(SmsListener listener) { mListener = listener; }} 

खुश कोडिंग

 String WHERE_CONDITION = unreadOnly ? SMS_READ_COLUMN + " = 0" : null; 

द्वारा बदल दिया गया:

 String WHERE_CONDITION = unreadOnly ? SMS_READ_COLUMN + " = 0 " : SMS_READ_COLUMN + " = 1 ";