package com.owwlo.courier.s.utils;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import com.owwlo.courier.R;
import com.owwlo.courier.s.data.Contact;
import com.owwlo.courier.s.data.MessageItem;
import com.owwlo.courier.s.Constants;
import com.owwlo.courier.s.CourierSService;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.telephony.PhoneNumberUtils;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
public class Utils {
private static final String TAG = Utils.class.getSimpleName();
public static String byteArrayToHexString(byte[] array) {
StringBuffer hexString = new StringBuffer();
for (byte b : array) {
int intVal = b & 0xff;
if (intVal < 0x10)
hexString.append("0");
hexString.append(Integer.toHexString(intVal));
}
return hexString.toString();
}
public static char generateRandomAuthChar() {
Random random = new Random();
int pickIndex = random.nextInt(36);
if (pickIndex < 10) {
return (char) ('0' + pickIndex);
} else {
return (char) ('A' + pickIndex - 10);
}
}
public static boolean isLocalNetConnected(Context context) {
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
return networkInfo != null
&& (networkInfo.getType() == ConnectivityManager.TYPE_BLUETOOTH
|| networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET || networkInfo
.getType() == ConnectivityManager.TYPE_WIFI);
}
public static void sendMessage(Context context, MessageItem item) {
// 这种方法不能在系统短信中查到,需要手动向Provider里写
SmsManager sms = SmsManager.getDefault();
if (item.getBody().length() > 70) {
ArrayList<String> msgs = sms.divideMessage(item.getBody());
for (String msg : msgs) {
sms.sendTextMessage(item.getAddress(), null, msg, null, null);
}
} else {
sms.sendTextMessage(item.getAddress(), null, item.getBody(), null,
null);
}
// 将短信数据写入系统短信数据库
ContentValues values = new ContentValues();
values.put("date", System.currentTimeMillis());
values.put("read", 0);
values.put("type", 2);
values.put("address", item.getAddress());
values.put("body", item.getBody());
context.getContentResolver().insert(Uri.parse("content://sms"), values);
}
/**
* 返回的Contact可能为空,号码为空
*/
public static Contact getContactInfoFormPhone(Context mContext,
String number) {
Contact contact = new Contact();
String minMatch = PhoneNumberUtils.toCallerIDMinMatch(number);
if (!TextUtils.isEmpty(number) && !TextUtils.isEmpty(minMatch)) {
Cursor cursor = mContext.getContentResolver().query(
Constants.PHONES_WITH_PRESENCE_URI,
Constants.CALLER_ID_PROJECTION,
Constants.CALLER_ID_SELECTION, new String[] { minMatch },
"length(" + Phone.NUMBER + ")");
if (cursor != null) {
try {
cursor.moveToPosition(-1);
while (cursor.moveToNext()) {
String numberInDb = cursor
.getString(Constants.PHONE_NUMBER_COLUMN);
if (PhoneNumberUtils.compare(number, numberInDb)) {
getContactFormCursor(contact, cursor);
}
}
} finally {
cursor.close();
}
}
}
return contact;
}
/**
* needLoadPhones设置为True在结果中载入通讯录中所有的号码,很慢……很慢……慢……
*/
public static List<Contact> loadAllContacts(Context mContext,
boolean needLoadPhones) {
List<Contact> list = new LinkedList<Contact>();
ContentResolver contentResolver = mContext.getContentResolver();
Cursor cursor = contentResolver.query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
try {
if (cursor.moveToFirst()) {
int idColumn = cursor
.getColumnIndex(ContactsContract.Contacts._ID);
int displayNameColumn = cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int photoIdColumn = cursor
.getColumnIndex(ContactsContract.Contacts.PHOTO_ID);
int hasPhoneNumberColumn = cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
do {
Contact contact = new Contact();
long contactId = cursor.getLong(idColumn);
String displayName = cursor.getString(displayNameColumn);
int phoneCount = cursor.getInt(hasPhoneNumberColumn);
long photoId = cursor.getLong(photoIdColumn);
contact.mName = displayName;
contact.mPersonId = contactId;
contact.mPhotoId = photoId;
if (needLoadPhones) {
if (phoneCount > 0) {
Cursor phoneCursor = mContext
.getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ "=" + contactId, null,
null);
try {
if (phoneCursor.moveToFirst()) {
do {
String phoneNumber = phoneCursor
.getString(phoneCursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contact.addPhone(phoneNumber);
} while (phoneCursor.moveToNext());
}
} finally {
phoneCursor.close();
}
} else {
continue;
}
}
list.add(contact);
} while (cursor.moveToNext());
}
} finally {
cursor.close();
}
return list;
}
private static void getContactFormCursor(final Contact contact,
final Cursor cursor) {
contact.mName = cursor.getString(Constants.CONTACT_NAME_COLUMN);
contact.mPhotoId = cursor.getLong(Constants.CONTACT_PHOTO_ID_COLUMN);
contact.mPersonId = cursor.getLong(Constants.CONTACT_ID_COLUMN);
}
public static String encodeImageTobase64(Bitmap image) {
Bitmap immagex = image;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
immagex.compress(Bitmap.CompressFormat.PNG, 0, baos);
byte[] b = baos.toByteArray();
String imageEncoded = Base64.encodeToString(b, Base64.NO_WRAP);
return imageEncoded;
}
public static Bitmap getUserImageByPersonId(Context context, long personId) {
Bitmap contactPhoto;
ContentResolver resolver = context.getContentResolver();
if (personId > 0) {
Uri uri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, personId);
InputStream input = ContactsContract.Contacts
.openContactPhotoInputStream(resolver, uri);
contactPhoto = BitmapFactory.decodeStream(input);
} else {
contactPhoto = BitmapFactory.decodeResource(context.getResources(),
R.drawable.default_contact_photo);
}
return contactPhoto;
}
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
// 按照Android官方的介绍,通讯里头像的长宽相当
// 4.0之前为96px 4.0为256px 4.1为720px
int resize = bitmap.getHeight() > 96 ? 96 : bitmap.getHeight();
Bitmap output = Bitmap.createBitmap(resize, resize, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, resize, resize);
final Rect desRect = new Rect(0, 0, resize, resize);
final RectF rectF = new RectF(desRect);
final float roundPx = (float)(resize * Constants.USER_IMAGE_RADIUS_PERCENT);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, desRect, paint);
return output;
}
public static String getIMXI(Context context) {
TelephonyManager tm = (TelephonyManager) context
.getApplicationContext().getSystemService(
Context.TELEPHONY_SERVICE);
String deviceId = tm.getDeviceId();
if (TextUtils.isEmpty(deviceId)) {
deviceId = "";
}
return deviceId;
}
}