Nasıl Android MMS Veri Okumak için?
Okumak istiyorum MMS veri gördüm bölümü tablo mmssms.db mms girdi saklı; ben kullanarak bir imleç ve bilmek istiyorum uygun URI; Ben kullanarak "içerik://mms-sms/konuşmalar" veSütun adları""(Gönderilen), "Metin" veya "" ve "Veri" sütun resmin adı. Tabi Adres
mmssms.db ve bölüm Sütun Tablo şema gördüm.
CEVAP
Biraz zor bu hakkında bilgi bulmak için değil, burada bulunan tüm bilgileri toplamak. Eğer aceleniz varsa ya da sadece okumak için değil, atlamakNasıl bir SMS veri almak içinbölüm.
://mms-sms/içerik konuşmalar
Bu aynı zamanda bize MMS sorgu sağlar Mms and SMS provider... ve SMS veritabanları URİ, ve tek bir iş parçacığı içinde karıştırın (hangi denirkonuşmaları).
Neden önemli content://mms-sms/conversations urı? Bu standart yolu MMS ve SMS mesajları; örneğin, ne zaman sen almak bir SMS üzerine tıklayın ve bildirim çubuğu, o-ecek göndermek bir yayın niyet gibi bu: content://mms-sms/conversations/XXX nereye XXX kimliği konuşma.
Tüm konuşmaların bir listesini almak
Yapmanız gereken tek şey content://mms-sms/conversations Urı sorgu için:
ContentResolver contentResolver = getContentResolver();
final String[] projection = new String[]{"*"};
Uri uri = Uri.parse("content://mms-sms/conversations/");
Cursor query = contentResolver.query(uri, projection, null, null, null);
Not:query arama ve tüm sütunları dönmek istiyorum genellikle, projection parametre olarak null iletebilirsiniz. Ancak, bu * kullanıyorum bu yüzden bu sağlayıcı ile bunu yapamazsınız.
Şimdi Cursor Her zamanki gibi döngü. Bu kullanmak isterim daha önemli sütunları
_idileti kimliğidir.Kaptan kurtarmaya belli mi?Gerçekten değil. Bu KİMLİĞİ detaylı bilgicontent://smscontent://mmskullanarak almak için kullanılabilir.dateaçıklamaya gerek yok.thread_idkonuşma kimliğidirbodybu konuşma son SMS içeriği. Eğer Eğer bir metin parçası varsa bile MMS, eğer bunullolacak.
Not:content://mms-sms/conversations sorgu her konuşma SMS veya MMS son olan farklı konuşmaların bir listesini döndürecektir. Eğer content://mms-sms/conversations/xxx sorgu xxx olan konuşma, SMS ve/veya MMS dönecektir.
Nasıl SMS ve MMS arasında ayırt etmek için
Genellikle, iÅŸleme hangi bilmek isteyecektir. Belgeler diyor ki:
Sanal bir sütun,
MmsSms.TYPE_DISCRIMINATOR_COLUMNolabilir bir projeksiyon talep edilmesi sorgu. Onun değeri ya da "mms" veya "sms", bağlı olarak, mesaj satır tarafından temsil edilmektedir. MMS mesajı veya SMS mesajı, sırasıyla.
this variable... o iş yapmak mümkün olmamıştır ancak atıfta bulunuyor sanırım. Nasıl yapacağımı söyleyin lütfen ya bu yazıyı düzenlemek varsa.
Şimdiye kadar bunu yaptım ve işe göründüğü gibi değil ama daha iyi bir yolu olmalı
ContentResolver contentResolver = getContentResolver();
final String[] projection = new String[]{"_id", "ct_t"};
Uri uri = Uri.parse("content://mms-sms/conversations/");
Cursor query = contentResolver.query(uri, projection, null, null, null);
if (query.moveToFirst()) {
do {
String string = query.getString(query.getColumnIndex("ct_t"));
if ("application/vnd.wap.multipart.related".equals(string)) {
// it's MMS
} else {
// it's SMS
}
} while (query.moveToNext());
}
Nasıl bir SMS veri almak için
SMS KİMLİĞİ var öyleyse yapmanız gereken tek şey:
String selection = "_id = " id;
Uri uri = Uri.parse("content://sms");
Cursor cursor = contentResolver.query(uri, null, selection, null, null);
String phone = cursor.getString(cursor.getColumnIndex("address"));
int type = cursor.getInt(cursor.getColumnIndex("type"));// 2 = sent, etc.
String date = cursor.getString(cursor.getColumnIndex("date"));
String body = cursor.getString(cursor.getColumnIndex("body"));
Nasıl bir MMS veri veri almak için?
MMSs biraz farklı. Farklı parçaları (metin, ses, resim, vb.) ile inşa edilebilir; burada her tür veriyi ayrı ayrı almak için ne kadar önemli olduğunu göreceksiniz.
Hadi mmsId değişken MMS kimliği var sanırım. content://mms/ sağlayıcı kullanarak bu MMS ile ilgili ayrıntılı bilgi elde edebiliriz:
Uri uri = Uri.parse("content://mms/");
String selection = "_id = " mmsId;
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
Ancak, sadece ilginç sütunu ise zaten mesajı okundu 1 read.
Nasıl MMS metin içeriğini almak için
Burada örneğin content://mms/part... kullanmak zorundayız:
String selectionPart = "mid=" mmsId;
Uri uri = Uri.parse("content://mms/part");
Cursor cursor = getContentResolver().query(uri, null,
selectionPart, null, null);
if (cursor.moveToFirst()) {
do {
String partId = cursor.getString(cursor.getColumnIndex("_id"));
String type = cursor.getString(cursor.getColumnIndex("ct"));
if ("text/plain".equals(type)) {
String data = cursor.getString(cursor.getColumnIndex("_data"));
String body;
if (data != null) {
// implementation of this method below
body = getMmsText(partId);
} else {
body = cursor.getString(cursor.getColumnIndex("text"));
}
}
} while (cursor.moveToNext());
}
Metin farklı parçalar içeriyor olabilir. ama genelde tek kişi olur. Eğer öyleyse döngü kaldırmak istiyorsanız çoğu kez işe yarar. Bu getMmsText yöntemi gibi görünüyor:
private String getMmsText(String id) {
Uri partURI = Uri.parse("content://mms/part/" id);
InputStream is = null;
StringBuilder sb = new StringBuilder();
try {
is = getContentResolver().openInputStream(partURI);
if (is != null) {
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String temp = reader.readLine();
while (temp != null) {
sb.append(temp);
temp = reader.readLine();
}
}
} catch (IOException e) {}
finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {}
}
}
return sb.toString();
}
Nasıl MMS görüntü almak için
Metin parçası elde etmekten daha aynı... tek fark, mıme tipi bir farklı için arıyor olacak
String selectionPart = "mid=" mmsId;
Uri uri = Uri.parse("content://mms/part");
Cursor cPart = getContentResolver().query(uri, null,
selectionPart, null, null);
if (cPart.moveToFirst()) {
do {
String partId = cPart.getString(cPart.getColumnIndex("_id"));
String type = cPart.getString(cPart.getColumnIndex("ct"));
if ("image/jpeg".equals(type) || "image/bmp".equals(type) ||
"image/gif".equals(type) || "image/jpg".equals(type) ||
"image/png".equals(type)) {
Bitmap bitmap = getMmsImage(partId);
}
} while (cPart.moveToNext());
}
Bu getMmsImage yöntemi gibi görünüyor:
private Bitmap getMmsImage(String _id) {
Uri partURI = Uri.parse("content://mms/part/" _id);
InputStream is = null;
Bitmap bitmap = null;
try {
is = getContentResolver().openInputStream(partURI);
bitmap = BitmapFactory.decodeStream(is);
} catch (IOException e) {}
finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {}
}
}
return bitmap;
}
Nasıl gönderenin adresi almak için
xxx MMS: kimliğidir content://mms/xxx/addr sağlayıcı kullanmanız gerekir
private String getAddressNumber(int id) {
String selectionAdd = new String("msg_id=" id);
String uriStr = MessageFormat.format("content://mms/{0}/addr", id);
Uri uriAddress = Uri.parse(uriStr);
Cursor cAdd = getContentResolver().query(uriAddress, null,
selectionAdd, null, null);
String name = null;
if (cAdd.moveToFirst()) {
do {
String number = cAdd.getString(cAdd.getColumnIndex("address"));
if (number != null) {
try {
Long.parseLong(number.replace("-", ""));
name = number;
} catch (NumberFormatException nfe) {
if (name == null) {
name = number;
}
}
}
} while (cAdd.moveToNext());
}
if (cAdd != null) {
cAdd.close();
}
return name;
}
Son düşünceler
- Google, milyonlarca dolar, binlerce ile, bir öğrenci para yok anlayamıyorum ya da bir başkası bu API belgesi. Sen kontrol etmek için kaynak kodunu bilmek nasıl çalışır, hangisi daha kötü, yok olun halk bu sabitleri kullanılan sütun veritabanı var, bu yüzden bunları yazarken el.
- Bir MMS içindeki veri başka türlü uygulayabilirsiniz aynı fikir üstünde öğrendim... sadece mıme tipi bilme meselesi.

Nasıl android niyeti ek veri almak içi...
nasıl değer okumak için android string...
Nasıl Stok CPU Kullanımı veri okumak i...
nasıl phpexcel veritabanına veri eklem...
Nasıl veri yapısı okumak için .NSArray...