android信息通讯
❶ android 即时通讯怎么做
一般都是使用一些传输协议,参考如下:
Android现在即时通讯(或者消息推送)有好几个开源项目框架可以实现,可以使用XMPP来实现即时通信。
XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。
1. XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分; 核心的XML流传输协议 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
2.XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
❷ Flutter与Android通信的三种方式
一、 MethodChannel
主要是flutter端调用android方法。flutter调取android方法,也可以android主动跟flutter通信,但是这个只能是传递数据,不是调方法。MethodChannel的flutter调取android方法,我之前写过,可以查看如下链接, https://www.jianshu.com/p/6b677ff3350e
Android主动跟flutter通信,如下
二、 BasicMessageChannel
它是可以双端通信的,flutter端可以给Android发送消息,Android也可以给Flutter发送消息。
三、EventChannel
只能是原生发送消息给Flutter端,例如监听手机电量变化,网络变化,传感器等。
打印结果如下:
总结一下:
MethodChannel 用于传递方法调用(method invocation),是flutter调取原生方法的,也可以原生主动传递数据给Flutter。
BasicMessageChannel 用于传递字符串和半结构化的信息。是两个端相互发送数据,接收数据的。
EventChannel 用于数据流(event streams)的通信。通长用于Nativie向flutter的通信,如:手机电量变化,网络连接变化,陀螺仪,传感器等;
tip:多种类型的通道混用可能会出现报错问题。
❸ android,是不是许多第三方应用都可获得通讯录的信息怎样防止自己的通讯信息被第三方应用得到
这个好像还真没有办法!
你在安装应用的时候,就会提示你,某些应用会访问你的通讯录,如果你不信任这个应用,你可以不装它!
❹ 怎么把安卓的短信,通讯录,通话记录导入iphone
1、首先进入iphone的桌面,找到“设置”,点击进入,2、在设置界面下拉菜单找到“icloud”选项,进入。3、将“icloud”中的“通讯录”开关打开,备注:此步的作用是将通讯录同步到icloud中。4、过几分钟同步之后,打开电脑上浏览器,输入icloud的网址,如图。在登录界面输入apple的帐号和密码。5、登录成功之后会看到“通讯录”的选项,点击进入。6、在通讯录界面的左下角找到设置按钮,点击按钮后会弹出操作菜单,选择“导出Vcard”, 将其保存到桌面。7、通过数据线将到处的文件传到安卓的手机根目录,然后打开手机的通讯录点击导入即可就会发现iphone的通讯录已经同步到安卓手机上了。其他安卓短信导入iphone方法:一、使用itunes:1.iPhone连接电脑打开itunes,备份手机.2..显示正在把iPhone上的程序传输到电脑时,短信已经备份好了,这时候点击叉叉终止备份3.如果itunes没反应就在设备那里点向上的箭头弹出iPhone.4.好了,在C:\Users\[USERNAME]\AppData\Roaming\Apple Computer\MobileSync\Backup\中打开最新文件夹,搜索这个文件,把它复制到桌面5.打开iPhone SMS to Android Converter,到第3步下拉到Option 2,上传刚刚复制出来的文件,选择iOS版本及需要备份的短信类型,最后一项勾不勾无所谓6.下拉到底点击红色的"Convert"按钮,保存弹出的文件iphone.xml7.把这个文件复制到安卓手机方便寻找的目录.8.在安卓上安装SMS Backup & Restore,打开点击"恢复",选择iphone.xml,按提示来,短信就转移过来了.二、用QQ同步助手导出安卓手机短信1.首先在安卓手机上安装QQ同步助手,登陆后点击“更多”,选择“备份至网络”。2.在电脑上登录网页版QQ同步助手,在“我的资料库”找到短信,点击 “所有对话”,然后“导出本组全部短信”(注意提示的解压密码),点击导出。3.导出的文件格式为zip,解压密码就是上图提示的开启密码,解开后为csv文件,至此第一步结束。三、用iTools 3.0导出 iPhone短信1.创建一个IPHONE备份。打开iTOOLS点击右上角的“工具箱”,找到” iTunes备份管理”,点击“创建备份”,选择“新建备份”,根据提示创建备份。2.导出短信。选择创建的备份,点击“打开”,找到“短信”中的“sms.db”,双击打开,这时短信就列出来了,全选并且点击“导出”。3.导出的格式也是csv文件,至此结束。
❺ android 四大组件是怎么通讯的
底层采用tcp/ip协议通讯,各个模块之间是弱耦合
❻ android开发怎样获取通讯录联系人信息
在Android开发中,我经常会遇到需要获取手明神机通讯录联系人信息,Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通激枣亏讯里联系人岩手的信息就须要访问系统的数据库,才能将信息获取出来。
下面直接贴出代码供大家参考:
程序文件java代码:
import java.io.InputStream;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class ContactsActivity extends ListActivity {
Context mContext = null;
/**获取库Phon表字段**/
private static final String[] PHONES_PROJECTION = new String[] {
Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID };
/**联系人显示名称**/
private static final int PHONES_DISPLAY_NAME_INDEX = 0;
/**电话号码**/
private static final int PHONES_NUMBER_INDEX = 1;
/**头像ID**/
private static final int PHONES_PHOTO_ID_INDEX = 2;
/**联系人的ID**/
private static final int PHONES_CONTACT_ID_INDEX = 3;
/**联系人名称**/
private ArrayList<String> mContactsName = new ArrayList<String>();
/**联系人头像**/
private ArrayList<String> mContactsNumber = new ArrayList<String>();
/**联系人头像**/
private ArrayList<Bitmap> mContactsPhonto = new ArrayList<Bitmap>();
ListView mListView = null;
MyListAdapter myAdapter = null;
@Override
public void onCreate(Bundle savedInstanceState) {
mContext = this;
mListView = this.getListView();
/**得到手机通讯录联系人信息**/
getPhoneContacts();
myAdapter = new MyListAdapter(this);
setListAdapter(myAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
//调用系统方法拨打电话
Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri
.parse("tel:" + mContactsNumber.get(position)));
startActivity(dialIntent);
}
});
super.onCreate(savedInstanceState);
}
/**得到手机通讯录联系人信息**/
private void getPhoneContacts() {
ContentResolver resolver = mContext.getContentResolver();
// 获取手机联系人
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {
//得到手机号码
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
//当手机号码为空的或者为空字段 跳过当前循环
if (TextUtils.isEmpty(phoneNumber))
continue;
//得到联系人名称
String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);
//得到联系人ID
Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);
//得到联系人头像ID
Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);
//得到联系人头像Bitamp
Bitmap contactPhoto = null;
//photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
if(photoid > 0 ) {
Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
contactPhoto = BitmapFactory.decodeStream(input);
}else {
contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.contact_photo);
}
mContactsName.add(contactName);
mContactsNumber.add(phoneNumber);
mContactsPhonto.add(contactPhoto);
}
phoneCursor.close();
}
}
/**得到手机SIM卡联系人人信息**/
private void getSIMContacts() {
ContentResolver resolver = mContext.getContentResolver();
// 获取Sims卡联系人
Uri uri = Uri.parse("content://icc/adn");
Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null,
null);
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {
// 得到手机号码
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
// 当手机号码为空的或者为空字段 跳过当前循环
if (TextUtils.isEmpty(phoneNumber))
continue;
// 得到联系人名称
String contactName = phoneCursor
.getString(PHONES_DISPLAY_NAME_INDEX);
//Sim卡中没有联系人头像
mContactsName.add(contactName);
mContactsNumber.add(phoneNumber);
}
phoneCursor.close();
}
}
class MyListAdapter extends BaseAdapter {
public MyListAdapter(Context context) {
mContext = context;
}
public int getCount() {
//设置绘制数量
return mContactsName.size();
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iamge = null;
TextView title = null;
TextView text = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.colorlist, null);
iamge = (ImageView) convertView.findViewById(R.id.color_image);
title = (TextView) convertView.findViewById(R.id.color_title);
text = (TextView) convertView.findViewById(R.id.color_text);
}
//绘制联系人名称
title.setText(mContactsName.get(position));
//绘制联系人号码
text.setText(mContactsNumber.get(position));
//绘制联系人头像
iamge.setImageBitmap(mContactsPhonto.get(position));
return convertView;
}
}
}
❼ android开发怎样获取通讯录联系人信息
要获取通讯录的联系人信息,只有通过系统联系人应用的内容提供者,才能访问到联系人数据库,下面有一个代码演示
代码演示
privateArrayList<HashMap<String,String>>readContact(){
//首先,从raw_contacts中读取联系人的id("contact_id")
//其次,根据contact_id从data表中查询出相应的电话号码和联系人名称
//然后,根据mimetype来区分哪个是联系人,哪个是电话号码
UrirawContactsUri=Uri
.parse("content://com.android.contacts/raw_contacts");
UridataUri=Uri.parse("content://com.android.contacts/data");
ArrayList<HashMap<String,String>>list=newArrayList<>();
//从raw_contacts中读取联系人的id("contact_id")
CursorrawContactsCursor=getContentResolver().query(rawContactsUri,
newString[]{"contact_id"},null,null,null);
if(rawContactsCursor!=null){
while(rawContactsCursor.moveToNext()){
StringcontactId=rawContactsCursor.getString(0);
//System.out.println(contactId);
//根据contact_id从data表中查询出相应的电话号码和联系人名称,实际上查询的是视图view_data
CursordataCursor=getContentResolver().query(dataUri,
newString[]{"data1","mimetype"},"contact_id=?",
newString[]{contactId},null);
if(dataCursor!=null){
HashMap<String,String>map=newHashMap<String,String>();
while(dataCursor.moveToNext()){
Stringdata1=dataCursor.getString(0);
Stringmimetype=dataCursor.getString(1);
//System.out.println(contactId+";"+data1+";"
//+mimetype);
if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
map.put("phone",data1);
}elseif("vnd.android.cursor.item/name"
.equals(mimetype)){
map.put("name",data1);
}
}
list.add(map);
dataCursor.close();
}
}
rawContactsCursor.close();
}
returnlist;
}手机联系人图片:
❽ 安卓如何导入通讯录
若是使用的vivo手机,可通过互传的一键换机功能,将数据覆盖到另一部手机:
1、打开“互传”,进入一键换机;
2、数据发送机选择“我是旧手机”--数据接收机选择“我是新手机”--选择手机品牌--等待识别完成或扫描界面二维码连接--同意;
3、连接完成后,选择需要传输的数据,确认后,点击“开始换机”。
一键换机支持传输联系人、通话记录、信息(不支持传输彩信)、日程、便签(仅支持vivo手机之间)、wifi密码、微信数据(仅支持vivo/OPPO/小米手机之间)、系统设置(不包括面部、锁屏密码和指纹)、部分应用的数据(详情见备注)、图片、音乐、文档、视频、录音(仅支持vivo手机之间)、隐私数据,您可以选择需团碧告要的数据一键换机到新手机。塌明
注:
1、加密的文件资料一键换机,需文件管理在5.5.1.3及以上版本和互传在5.1.3及以上版本才支持;传输时需输入隐私密码。
2、vivo/iQOO手机和苹果手机之间只支持传输日程、联系人、图片和视频,目前只支持苹果一键换机到安卓手机,若您想将安卓手机数据换机到苹果,需点击传送文件中的iPhone传文件。
3、一键换机支持选择部分数据进行传输;若用户仅需要发送数个文件(如照片、视频),也可使用互传的传送文件功能。
4、便签的数据可以传到原子笔记上,原子笔记慧衡的数据不能传输到便签上。
5、为了带来更好的换机体验,vivo与OPPO、小米达成合作,除照片、联系人等系统数据外,互传App新增支持迁移OPPO、小米手机的三方应用数据。
版本要求:
vivo:互传升级至6.2.5.1及以上版本
OPPO:欢太手机搬家-换机助手升级至13.3.7及以上版本
小米:小米换机升级至4.0.0及以上版本
若有更多疑问,可进入vivo官网/vivo商城APP--我的--在线客服或者vivo官网网页版--下滑底部--在线客服--输入人工客服进入咨询了解。