#android #sms #mms #vcf-vcard
#Android #sms #mms #vcf-визитная карточка
Вопрос:
Я хочу изменить исходный код Android, который может отправлять (contacts / vcard / .vcf-файл) с помощью MMS или SMS, по умолчанию Android использует Bluetooth. Я нахожу много способов, но все они не работают. Я знаю, что формат vcf такой:
BEGIN:VCARD
VERSION:2.1
N:;lybeen;;;
FN:lybeen
TEL;CELL;
PREF:1-123-234-1234
TEL;CELL:000-111-1111
END:VCARD
Я отправляю эту строку по SMS в виде простого сообщения. Некоторые телефоны Android могут распознать это как контакт, однако большинство телефонов Android не могут распознать, но я не знаю, как отправлять контакты по MMS.
Комментарии:
1. похоже, это более общая проблема, подробнее читайте здесь example_1 , example_2 , в любом случае, похоже, это не вопрос, связанный с программированием.
2. Я хочу реализовать, программируя в исходном коде Android, мне нелегко реализовать
3. @lybeen вы нашли решение?
Ответ №1:
хотя я думаю, что я опоздал с ответом на вопрос, поможет ли это OP или нет, но это всегда будет полезно для будущих посетителей.
Чтобы отправить визитную карточку через mms, вам просто нужно прикрепить .vcf
файл с намерением системы.
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/x-vcard");
sendIntent.putExtra(Intent.EXTRA_STREAM,
Uri.fromFile(outputFile));
startActivity(sendIntent);
Комментарии:
1. привет, друзья, я разрабатываю приложение для чата, поэтому я хочу отправлять контакты в чате, например, в приложении whats, поэтому, пожалуйста, помогите мне, как найти решение. Спасибо
Ответ №2:
вероятно, вы могли бы отправить метод вызова vcard sendDataMessage из класса SmsManager. это означает, что вы не можете отправить отправить визитную карточку в виде простого сообщения, но вам нужно закодировать визитную карточку в шестнадцатеричном формате. или вы, вероятно, можете посмотреть на это. http://code.google.com/p/android-vcard
Ответ №3:
Это может быть полезно для вас. Попробуйте это с учетом ваших потребностей —
package com.vcard;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
public class VCardActivity extends Activity
{
Cursor cursor;
ArrayList<String> vCard ;
String vfile;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vfile = "Contacts" "_" System.currentTimeMillis() ".vcf";
/**This Function For Vcard And here i take one Array List in Which i store every Vcard String of Every Conatact
* Here i take one Cursor and this cursor is not null and its count>0 than i repeat one loop up to cursor.getcount() means Up to number of phone contacts.
* And in Every Loop i can make vcard string and store in Array list which i declared as a Global.
* And in Every Loop i move cursor next and print log in logcat.
* */
getVcardString();
}
private void getVcardString() {
// TODO Auto-generated method stub
vCard = new ArrayList<String>();
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if(cursor!=nullamp;amp;cursor.getCount()>0)
{
cursor.moveToFirst();
for(int i =0;i<cursor.getCount();i )
{
get(cursor);
Log.d("TAG", "Contact " (i 1) "VcF String is" vCard.get(i));
cursor.moveToNext();
}
}
else
{
Log.d("TAG", "No Contacts in Your Phone");
}
}
public void get(Cursor cursor)
{
//cursor.moveToFirst();
String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
AssetFileDescriptor fd;
try {
fd = this.getContentResolver().openAssetFileDescriptor(uri, "r");
// Your Complex Code and you used function without loop so how can you get all Contacts Vcard.??
/* FileInputStream fis = fd.createInputStream();
byte[] buf = new byte[(int) fd.getDeclaredLength()];
fis.read(buf);
String VCard = new String(buf);
String path = Environment.getExternalStorageDirectory().toString() File.separator vfile;
FileOutputStream out = new FileOutputStream(path);
out.write(VCard.toString().getBytes());
Log.d("Vcard", VCard);*/
FileInputStream fis = fd.createInputStream();
byte[] buf = new byte[(int) fd.getDeclaredLength()];
fis.read(buf);
String vcardstring= new String(buf);
vCard.add(vcardstring);
String storage_path = Environment.getExternalStorageDirectory().toString() File.separator vfile;
FileOutputStream mFileOutputStream = new FileOutputStream(storage_path, false);
mFileOutputStream.write(vcardstring.toString().getBytes());
} catch (Exception e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
для получения более подробного кода вы также можете посмотреть наhttp://code.google.com/p/android-vcard/downloads/list