/*
* Copyright (C) 2015 Naman Dwivedi
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*/
package com.wm.remusic.uitl;
import android.content.ContentUris;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.util.TypedValue;
import com.sun.mail.smtp.SMTPMessage;
import com.wm.remusic.MainApplication;
import com.wm.remusic.R;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
public class CommonUtils {
public static final String MUSIC_ONLY_SELECTION = MediaStore.Audio.AudioColumns.IS_MUSIC + "=1"
+ " AND " + MediaStore.Audio.AudioColumns.TITLE + " != ''";
private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
public static int getStatusHeight(Context context) {
int statusHeight = -1;
try {
Class clazz = Class.forName("com.android.internal.R$dimen");
Object object = clazz.newInstance();
int height = Integer.parseInt(clazz.getField("status_bar_height")
.get(object).toString());
statusHeight = context.getResources().getDimensionPixelSize(height);
} catch (Exception e) {
e.printStackTrace();
}
return statusHeight;
}
//获得独一无二的Psuedo ID
public static String getUniquePsuedoID() {
String serial = null;
String m_szDevIDShort = "35" +
Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +
Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +
Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +
Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +
Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
Build.USER.length() % 10; //13 位
try {
serial = android.os.Build.class.getField("SERIAL").get(null).toString();
//API>=9 使用serial号
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception exception) {
//serial需要一个初始化
serial = "serial"; // 随便一个初始化
}
//使用硬件信息拼凑出来的15位号码
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
}
/**
* 获取apk的版本号 currentVersionCode
*
* @param ctx
* @return
*/
public static int getAPPVersionCode(Context ctx) {
int currentVersionCode = 0;
PackageManager manager = ctx.getPackageManager();
try {
PackageInfo info = manager.getPackageInfo(ctx.getPackageName(), 0);
String appVersionName = info.versionName; // 版本名
currentVersionCode = info.versionCode; // 版本号
System.out.println(currentVersionCode + " " + appVersionName);
} catch (Exception e) {
e.printStackTrace();
}
return currentVersionCode;
}
public static String getDeviceInfo() {
StringBuilder builder = new StringBuilder();
builder.append("MODEL = " + Build.MODEL + "\n");
builder.append("PRODUCT = " + Build.PRODUCT + "\n");
builder.append("TAGS = " + Build.TAGS + "\n");
builder.append("CPU_ABI" + Build.CPU_ABI + "\n");
builder.append("BOARD = " + Build.BOARD + "\n");
builder.append("BRAND = " + Build.BRAND + "\n");
builder.append("DEVICE = " + Build.DEVICE + "\n");
builder.append("DISPLAY = " + Build.DISPLAY + "\n");
builder.append("ID = " + Build.ID + "\n");
builder.append("VERSION.RELEASE = " + Build.VERSION.RELEASE + "\n");
builder.append("Build.VERSION.SDK_INT = " + Build.VERSION.SDK_INT + "\n");
builder.append("VERSION.BASE_OS = " + Build.VERSION.BASE_OS + "\n");
builder.append("Build.VERSION.SDK = " + Build.VERSION.SDK + "\n");
builder.append("APP.VERSION = " + getAPPVersionCode(MainApplication.context) + "\n");
builder.append("\n" + "log:" + "\n");
return builder.toString();
}
/**
* 以文本格式发送邮件
* @param title 待发送的邮件的信息
*/
public static boolean sendTextMail(String title ,String content)
{
try
{
Properties props = System.getProperties();
props.put("mail.smtp.host", "smtp.163.com");
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props, null);
Transport transport = session.getTransport("smtp");
transport.connect("smtp.163.com", 25, "remusic_log@163.com",
"remusiclog1");
Message mailMessage = new SMTPMessage(session);
Address from = new InternetAddress("remusic_log@163.com");
mailMessage.setFrom(from);
Address to = new InternetAddress("remusic_log@163.com");
mailMessage.setRecipient(Message.RecipientType.TO, to);
mailMessage.setSubject(title);
mailMessage.setSentDate(new Date());
mailMessage.setText(content);
transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
return true;
}
catch (MessagingException ex)
{
ex.printStackTrace();
}
return false;
}
public static boolean isMarshmallow() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
public static boolean isLollipop() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
}
// 检测MIUI
public static boolean isJellyBeanMR2() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
}
public static boolean isJellyBean() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
}
public static boolean isJellyBeanMR1() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
}
public static boolean isMIUI() {
try {
final BuildProperties prop = BuildProperties.newInstance();
return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
} catch (final IOException e) {
return false;
}
}
// 检测Flyme
public static boolean isFlyme() {
try {
// Invoke Build.hasSmartBar()
final Method method = Build.class.getMethod("hasSmartBar");
return method != null;
} catch (final Exception e) {
return false;
}
}
public static Uri getAlbumArtUri(long paramInt) {
return ContentUris.withAppendedId(Uri.parse("content://media/external/audio/albumart"), paramInt);
}
public static final String makeLabel(final Context context, final int pluralInt,
final int number) {
return context.getResources().getQuantityString(pluralInt, number, number);
}
// public static final String makeShortTimeString(final Context context, long secs) {
// long hours, mins;
//
// hours = secs / 3600;
// secs %= 3600;
// mins = secs / 60;
// secs %= 60;
//
// final String durationFormat = context.getResources().getString(
// hours == 0 ? "durationformatshort" : R.string.durationformatlong);
// return String.format(durationFormat, hours, mins, secs);
// }
public static int getActionBarHeight(Context context) {
int mActionBarHeight;
TypedValue mTypedValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.actionBarSize, mTypedValue, true);
mActionBarHeight = TypedValue.complexToDimensionPixelSize(mTypedValue.data, context.getResources().getDisplayMetrics());
return mActionBarHeight;
}
// public static boolean hasEffectsPanel(final Activity activity) {
// final PackageManager packageManager = activity.getPackageManager();
// return packageManager.resolveActivity(createEffectsIntent(),
// PackageManager.MATCH_DEFAULT_ONLY) != null;
// }
// public static Intent createEffectsIntent() {
// final Intent effects = new Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL);
// effects.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, MusicPlayer.getAudioSessionId());
// return effects;
// }
public static int getBlackWhiteColor(int color) {
double darkness = 1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255;
if (darkness >= 0.5) {
return Color.WHITE;
} else return Color.BLACK;
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}