import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.GradientDrawable.Orientation;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Environment;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.widget.Toast;
import cn.hi321.android.player.R;
import com.weichuang.china.BaseActivity;
import com.weichuang.china.VideoInfo;
import com.weichuang.china.video.player.SystemPlayer;
/**
*
* @author yanggf
*
*/
public class Utils {
private static final String TAG = "Utils";
public static final String APP_VERSION = "1.5";
public static final String UNKNOWN_VERSION = "versionUnknown";
public static final String UNKNOWN_MAC_ADDRESS = "00:00:00:00:00:00";
private static String mMacAddress = "00:00:00:00:00:00";
private static String MAK_KEK = "mac_key";
private static String MAK_VALUE = "mac_value";
private static Context mContext = null;
private static String mAppVersion = "versionUnknown";
public static final String ECODER_1 = "VFP.apk";
public static final String ECODER_2 = "ARMv7-NEON.apk";
public static boolean isErrorNum = false;
public static final String FS_CACHE = "fscache";
public static final String synchronizeds = "synchronized";
public static boolean isLogined = false;
public static final String NET_WORK_INVAILABLE = "netInvailable";
public static final String NULL = "null";
public static Dialog mMediaDialog;
public static int CurrentPosInMediaIdList;
public static boolean isFileChange = false;
private static Dialog dialog = null;
public final static String PLAY_LOADING_KEY = "play_loading_key";
public final static String BY_PLAY_HISTORY_KEY = "by_play_histoty_key";
/** 文件保存路径mnt/sdcard/chinavideo/ */
public static final String SAVE_FILE_PATH_DIRECTORY = Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/" + "chinavideo";
/** 文件保存路径sdcard */
public static final String SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
/** 升级请求路径标识 **/
/** 缓存解码器的目录 */
public static final String CACHE_IMG_DIR_PATH = "/ecoder/";
/** 缓存解码APK的目录 */
public static final String CACHE_ECODER_PATH = "/ecoder/";
/** 手机网络cmwap */
public static final String NET_CMWAP = "cmwap";
/** 手机网络3gwap */
public static final String NET_WAP_3G = "3gwap";
/** 手机网络uniwap */
public static final String NET_UNIWAP = "uniwap";
public static final String CMWAP = "cmwap";
public static final String WAP_3G = "3gwap";
public static final String UNIWAP = "uniwap";
/** session过期,重新请求配置 */
public static final byte HANDLER_SESSION_EXPIRED = 1;
/** errorMessage */
public static final String KEY_ERROR_MESSAGE = "errorMessage";
// 图片最大小界限
public final static int IMAGE_SIZE_COMPRESS = 200 * 1024;
public static int BITMAP_DENSITY = 160;
public static int POSITION = 1000;
public static int CURRENT_SYSTEM_DENSITY = 160;
/**
* 设置菜单按钮背景颜色
*/
public static int color[] = new int[] { Color.BLACK, Color.BLACK };
public static Drawable setBackgroundType(String tyle) {
// Orientation.TOP_BOTTOM这个参数决定渐变是从上到下渐变的
GradientDrawable grad = new GradientDrawable(Orientation.BOTTOM_TOP, color);
grad.setGradientType(GradientDrawable.LINEAR_GRADIENT);
if (tyle.equals("半圆形")) {
grad.setCornerRadii(new float[] { 10, 10, 10, 10, 10, 10, 10, 10 });
} else if (tyle.equals("圆形")) {
grad.setCornerRadii(new float[] { 70, 70, 70, 70, 70, 70, 70, 70 });
} else if (tyle.equals("正方形")) {
grad.setCornerRadii(new float[] { 1, 1, 1, 1, 1, 1, 1, 1 });
}
return grad;
}
/**
* 得到SD卡是否存在
*
* @return
*/
public static String getSDcard() {
String sdcard = null;
// mnt/sdcard/
final String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED)) {
sdcard = SDCARD;
}
return sdcard;
}
/**
* 验证邮箱格式
*/
public static boolean checkEmail(String email) {
Pattern p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
Matcher m = p.matcher(email);
return m.find();
}
private static final String LOG_PATH = SAVE_FILE_PATH_DIRECTORY + "/fslog.txt";
public static File file = new File(LOG_PATH);
/**
* 写入文件
*
* @param str
*/
public synchronized static void writeFile(String content) {
if (TextUtils.isEmpty(content) || !isSDcardExist()) {
return;
}
try {
if (!file.exists()) {
file.createNewFile();
}
RandomAccessFile raf = new RandomAccessFile(file, "rw");
long len = raf.length();
raf.seek(len);
raf.writeBytes(content);
raf.close();
} catch (Exception e) {
LogUtil.e(TAG, e.toString());
}
}
/**
* 判断是否有存储卡,有返回TRUE,否则FALSE
*
* @return
*/
public static boolean isSDcardExist() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
/**
* MD5 加密
*
* @param str
* @return
*/
public static String getMD5Str(String str) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
LogUtil.e(TAG, e.toString());
return null;
} catch (UnsupportedEncodingException e) {
LogUtil.e(TAG, e.toString());
return null;
}
final byte[] byteArray = messageDigest.digest();
final StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
} else {
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
}
// 16位加密,从第9位到25位
return md5StrBuff.substring(8, 24).toString().toUpperCase();
}
/**
* 获取源图片的BITMAP,无压缩,本地图片
*
* @param sImagePath
* @return
*/
public static Bitmap getImgCacheFromLocal(String sImagePath) {
try {
final File f = new File(sImagePath);
if (!f.exists()) {
return null;
}
final FileInputStream fis = new FileInputStream(f);
LogUtil.i(TAG, "fis==" + fis);
final Bitmap bitmap = BitmapFactory.decodeStream(fis);
fis.close();
return bitmap;
} catch (Exception ex) {
ex.printStackTrace();
LogUtil.e(TAG, ex.toString());
return null;
}
}
public static void showToast(Context act, String content, int length) {
Toast.makeText(act, content, length).show();
}
/**
* 保存图片
*
* @param sOldImagePath
* @param sNewImagePath
* 图片路径格式如 /data/data/com.xxx/1.png
* @return
*/
public static boolean saveImage(Bitmap oldbitmap, String sNewImagePath) {
LogUtil.e(TAG, "存入本地缓存" + sNewImagePath);
try {
final FileOutputStream fileout = new FileOutputStream(sNewImagePath);
oldbitmap.compress(CompressFormat.PNG, 100, fileout);
fileout.flush();
fileout.close();
LogUtil.e(TAG, "存入本地成功" + sNewImagePath);
return true;
} catch (Exception e) {
LogUtil.e(TAG, "存入本地失败" + sNewImagePath);
e.printStackTrace();
LogUtil.e(TAG, e.toString());
return false;
}
}
public static String getAppFilesDir(Context context) {
if (isSDcardExist()) {
return getAppFilesDirBySDCard(context);
} else {
return getAppFilesDirByData(context);
}
}
public static String getAppFilesDirByData(Context context) {
return context.getFilesDir().getAbsolutePath();
}
/**
* 获取安装在用户手机上的sdcard/下的chianandroid目录
*
*/
public static String getAppFilesDirBySDCard(Context context) {
return SAVE_FILE_PATH_DIRECTORY;
}
public static void initCacheFile(Context context) {
if (isSDcardExist()) {
initCacheFileBySDCard(context);
} else {
initCacheFileByData(context);
}
}
/**
* 创建/data/data/com.weichuang.china/files/ecoder缓存文件夹
*/
public static void initCacheFileByData(Context context) {
final String imageDir = getAppFilesDirByData(context) + CACHE_IMG_DIR_PATH;
// data/data/cn.hi321.android.player/files/ecoder/VFP.apk
final File imageFileDir = new File(imageDir);
if (!imageFileDir.exists()) {
imageFileDir.mkdirs();
}
}
public static void initCacheFileBySDCard(Context context) {
final String imageDir = getAppFilesDirBySDCard(context) + CACHE_IMG_DIR_PATH;
// mnt/sdcard/chinavideo/ecoder
final File imageFileDir = new File(imageDir);
if (!imageFileDir.exists()) {
imageFileDir.mkdirs();
}
}
private static Pattern StringPattern = null;
public static String getNetMode(Context context) {
String netMode = "";
try {
final ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo mobNetInfoActivity = connectivityManager.getActiveNetworkInfo();
if (mobNetInfoActivity == null || !mobNetInfoActivity.isAvailable()) {
netMode = NET_WORK_INVAILABLE;
} else {
int netType = mobNetInfoActivity.getType();
if (netType == ConnectivityManager.TYPE_WIFI) {
netMode = mobNetInfoActivity.getTypeName();
} else if (netType == ConnectivityManager.TYPE_MOBILE) {
netMode = mobNetInfoActivity.getExtraInfo();
} else {
// Do nothing
}
}
} catch (Exception ex) {
ex.printStackTrace();
netMode = "";
} finally {
if ("epc.tmobile.com".equals(netMode) || "".equals(netMode)) {
netMode = "3G";
return netMode;
}
}
return netMode;
}
/**
* 动态获取应用程序的版本名称
*/
public static String getAppVersionName(Context context) {
mContext = context;
setVersionNameFromPackage();
return mAppVersion;
}
private static void setVersionNameFromPackage() {
if (!isNeedToSetVersionNumber()) {
return;
}
try {
PackageManager manager = mContext.getPackageManager();
PackageInfo info = manager.getPackageInfo(mContext.getPackageName(), 0);
if (info != null && !isEmpty(info.versionName)) {
mAppVersion = info.versionName;
}
} catch (Exception e) {
e.printStackTrace();
mAppVersion = UNKNOWN_VERSION;
}
}
// mAppVersion=1.1
private static boolean isNeedToSetVersionNumber() {
return ((UNKNOWN_VERSION.equals(mAppVersion)) && (mContext != null));
}
/**
* 获得设备Mac地址
*
* @param context
* @return
*/
public static String getLocalMacAddress1(Context context) {
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
if (info != null) {
return info.getMacAddress();
}
return null;
}
/**
* 获得设备Mac地址完美版
*
* @param context
* @return
*/
public static String getLocalMacAddress(Context context) {
if ((!UNKNOWN_MAC_ADDRESS.equals(mMacAddress)) || (context == null)) {
return mMacAddress;
}
try {
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
if (info != null && !isEmpty(info.getMacAddress())) {
setCacheMacAddress(context, info.getMacAddress());
return (mMacAddress = info.getMacAddress());
} else {
String mac = getCacheMacAddress(context);
if (!isEmpty(mac)) {
return (mMacAddress = mac);
} else {
// "AF"标识来自android客户端Aphone的mac地址;"AP"标识来自android客户端Apad的mac地址
// 12
String md5Str = getMD5Str(String.valueOf(System.currentTimeMillis()));
String randomMacAddress = substringAndAddPrefix(md5Str, 10, "AP");
if (!isEmpty(randomMacAddress)) {
setCacheMacAddress(context, randomMacAddress);
return randomMacAddress;
} else {
return mMacAddress;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return mMacAddress;
}
private static String getCacheMacAddress(Context context) {
if (context == null) {
return null;
}
SharedPreferences sharedPreferences = context.getSharedPreferences(MAK_KEK, Context.MODE_PRIVATE);
return sharedPreferences.getString(MAK_VALUE, null);
}
private static void setCacheMacAddress(Context context, String macAddress) {
if (context != null && !isEmpty(macAddress)) {
SharedPreferences preference = context.getSharedPreferences(MAK_KEK, Context.MODE_PRIVATE);
Editor editor = preference.edit();
editor.putString(MAK_VALUE, macAddress);
editor.commit();
}
}
/**
* 取字符串的前toCount个字符 ,并加前缀
*
* @param str
* 被处理字符串
* @param toCount
* 截取长度
* @param more
* 前缀字符串
* @version 2013.1.17
* @author yanggf
* @return String
*/
public static String substringAndAddPrefix(String str, int toCount, String more) {
int reInt = 0;
String reStr = "";
if (str == null)
return "";
char[] tempChar = str.toCharArray();
for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {
String s1 = str.valueOf(tempChar[kk]);
byte[] b = s1.getBytes();
reInt += b.length;
reStr += tempChar[kk];
}
if (toCount == reInt || (toCount == reInt - 1))
reStr = more + reStr;
return reStr;
}
public static boolean isEmpty(String str) {
if (TextUtils.isEmpty(str) || Utils.NULL.equals(str) || (str != null && "".equals(str.trim()))) {
return true;
}
return false;
}
/**
* 检测手机是否已插入SIM卡
*
* @param context
* @return
*/
public static boolean isCheckSimCardAvailable(Context context) {
final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getSimState() != TelephonyManager.SIM_STATE_READY) {
return false;
}
return true;
}
/**
* 检测是否有网络
*
* @param context
* @return
*/
public static boolean isCheckNetAvailable(Context context) {
boolean isCheckNet = false;
try {
final ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo mobNetInfoActivity = connectivityManager.getActiveNetworkInfo();
if (mobNetInfoActivity == null || !mobNetInfoActivity.isAvailable()) {
isCheckNet = false;
return isCheckNet;
} else {
isCheckNet = true;
return isCheckNet;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return isCheckNet;
}
/**
* 获取android系统版本号
*
* @param context
* @return
*/
public static String getOSVersion(Context context) {
String release = android.os.Build.VERSION.RELEASE; // android系统版本号
release = "android" + release;
return release;
}
/**
* 获得android系统sdk版本号
*
* @param context
* @return
*/
public static String getOSVersionSDK(Context context) {
String sdk = android.os.Build.VERSION.SDK; // SDK号
return sdk;
}
/**
*
* @param context
* @return
*/
public static int getOSVersionSDKINT(Context context) {
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
return currentapiVersion;
}
/**
* 获取设备分辨率和密度信息,判断其属于aphone还是apad,此处判断标准是根据分辨率和dpi综合对比来判断的,大概标准是
* 大于800x480的为pad,小于的为phone
*/
/**
* 获取手机型号
*/
public static String getDeviceModel() {
String model = android.os.Build.MODEL;
return model;
}
/**
* 获得设备ip地址
*
* @param context
* @return
*/
public static String getLocalIpAddress(Context context) {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
ex.printStackTrace();
LogUtil.e(TAG, "WifiPreference IpAddress");
}
return null;
}
/**
* 获得设备的横向dpi
*/
public static float getWidthDpi(Context context) {
DisplayMetrics dm = null;
try {
if (context != null) {
dm = new DisplayMetrics();
dm = context.getApplicationContext().getResources().getDisplayMetrics();
}
return dm.densityDpi;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
/**
* 获得设备的纵向dpi
*/
public static float getHeightDpi(Context context) {
DisplayMetrics dm = new DisplayMetrics();
dm = context.getApplicationContext().getResources().getDisplayMetrics();
return dm.ydpi;
}
private static AlertDialog.Builder customBuilder = null;
public static void showDialog(String title, String positiveButton, String negativeButton, String message,
final boolean isFinshing) {
try {
synchronized (Utils.synchronizeds) {
// if(customBuilder==null){
// customBuilder = new Dialog(BaseActivity.mBaseActivity);
customBuilder = new AlertDialog.Builder(BaseActivity.mBaseActivity);
// }
if (customBuilder != null && title != null) {
customBuilder.setTitle(title);
} else {
if (customBuilder != null) {
customBuilder.setTitle("提示");
}
}
if (customBuilder != null && message != null) {
customBuilder.setMessage(message);
} else {
customBuilder.setMessage("确定要退出吗?");
}
if (customBuilder != null && positiveButton != null) {
customBuilder.setPositiveButton(positiveButton, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (isFinshing) {
((Activity) BaseActivity.mBaseActivity).finish();
((Activity) BaseActivity.mBaseActivity).overridePendingTransition(R.anim.fade,
R.anim.hold);
}
customBuilder = null;
dialog = null;
}
});
}
if (customBuilder != null && negativeButton != null) {
customBuilder.setNegativeButton(negativeButton, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
customBuilder = null;
dialog = null;
}
});
}
if (customBuilder != null) {
dialog = customBuilder.create();
}
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
if (dialog != null/* &&!dialog.isShowing() */) {
dialog.show();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void closeDialog() {
synchronized (Utils.synchronizeds) {
if (dialog != null) {
dialog.dismiss();
}
}
}
private static Dialog waitingDialog;
public static void startWaitingDialog(Context context) {
synchronized (Utils.synchronizeds) {
// if(waitingDialog==null){
waitingDialog = new Dialog(context, R.style.waiting);
// dialog.setCanceledOnTouchOutside(true);
waitingDialog.setContentView(R.layout.waiting);
waitingDialog.setCanceledOnTouchOutside(false);
// dialog.setCancelable(false);
waitingDialog.show();
// }else{
// if(waitingDialog!=null&&!waitingDialog.isShowing()){
// waitingDialog.show();
// }
//
// }
}
}
public static void closeWaitingDialog() {
synchronized (Utils.synchronizeds) {
if (waitingDialog != null) {
waitingDialog.dismiss();
}
}
}
public static void closeMediaDialog() {
if (mMediaDialog != null)
mMediaDialog.dismiss();
}
/**
* 删除一个目录或者一个文件
*/
public static boolean delDir(File dir) {
if (dir == null || !dir.exists() || dir.isFile()) {
return false;
}
for (File file : dir.listFiles()) {
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
delDir(file);// 递归
}
}
dir.delete();
return true;
}
// mnt/sdcard/funshion/风景如画.mp4
public static String getFileName(String uri) {
String name = uri;
if (name != null) {
String[] content = name.split("/");
if (content != null && content.length > 1) {
name = content[content.length - 1];
}
}
return name;
}
public static boolean isNEON = false;
public static String isNEONStr = "不支持";
public static String isNEONFit = "无法判断";
public static boolean intCPUInfo() {
String cupinfo = getCPUInfos();
if (cupinfo != null) {
cupinfo = cupinfo.toLowerCase();
if (cupinfo != null && cupinfo.contains("neon")) {
isNEON = true;
isNEONStr = "支持";
} else {
isNEON = false;
isNEONStr = "不支持";
}
}
return isNEON;
}
public static boolean isNEON() {
return isNEON;
}
private static String getCPUInfos() {
String str1 = "/proc/cpuinfo";
String str2 = "";
StringBuilder resusl = new StringBuilder();
String resualStr = null;
try {
FileReader fr = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(fr, 8192);
while ((str2 = localBufferedReader.readLine()) != null) {
resusl.append(str2);
String cup = str2;
LogUtil.i(TAG, "---" + cup);
}
if (resusl != null) {
resualStr = resusl.toString();
return resualStr;
}
} catch (IOException e) {
e.printStackTrace();
}
return resualStr;
}
private static String[] getDivceInfo() {
String str1 = "/proc/cpuinfo";
String str2 = "";
String[] cpuInfo = { "", "" };
String[] arrayOfString;
try {
FileReader fr = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(fr, 8192);
str2 = localBufferedReader.readLine();
arrayOfString = str2.split("\\s+");
for (int i = 2; i < arrayOfString.length; i++) {
cpuInfo[0] = cpuInfo[0] + arrayOfString[i] + " ";
}
str2 = localBufferedReader.readLine();
arrayOfString = str2.split("\\s+");
cpuInfo[1] += arrayOfString[2];
localBufferedReader.close();
} catch (IOException e) {
}
return cpuInfo;
}
public static String currentEcoder = "无法知晓";
public static String getDeviceCPUInfo() {
String cpuType = "";
String[] cpuInfo = getDivceInfo();
if (cpuInfo != null && cpuInfo.length > 0) {
cpuType = cpuInfo[0];
if (cpuType != null) {
if (isNEON) {
isNEONFit = "ARMv7_NEON.apk";
} else {
if (cpuType != null && cpuType.toLowerCase().equals("armv7")) {
isNEONFit = "ARMv7.apk";
} else if (cpuType != null && cpuType.toLowerCase().equals("armv6")) {
isNEONFit = "ARMv6.apk";
} else if (cpuType != null && cpuType.toLowerCase().equals("armv5")) {
isNEONFit = "VFP.apk";
} else {
isNEONFit = "VFP.apk";
}
}
String[] cpuInfos = cpuType.split(" ");
cpuType = cpuInfos[0];
}
}
return cpuType;
}
// 检查某个应用是否安装
public static boolean checkAPP(Context context, String packageName) {
if (packageName == null || "".equals(packageName))
return false;
try {
ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
public static void copyAssetsToSdcard(Activity context, String assetsFileName, String outFileName) {
InputStream is = null;
OutputStream os = null;
try {
Utils.initCacheFile(context);
is = context.getAssets().open(assetsFileName);
String rootPath = Utils.getAppFilesDir(context) + Utils.CACHE_ECODER_PATH + outFileName;
// mnt/sdard/chinavideo/ecoder/ARMV7-NEON.apk
// data/data/cn.hi321.android.player/chinavideo/ecoder/ARMV7-NEON.apk
File file = new File(rootPath);
if (file.exists()) {
file.delete();
}
os = new FileOutputStream(rootPath);
// String path = Utils.getAppFilesDir(context);
// // OutputStream outStream = new
// OutputStream outStream = new FileOutputStream(path+"/ecoder/" +
// outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
if (os != null)
os.flush();
if (os != null)
os.close();
install(context, rootPath);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (is != null)
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 安装复制到SD卡中的apk文件
*
* @param context
* @param outFileName
*/
private static void install(Activity context, String outFileName) {
// [文件夹705:drwx---r-x,给此文件夹目录设置读写权限]
String[] args1 = { "chmod", "705", Utils.getAppFilesDir(context) + Utils.CACHE_ECODER_PATH };
exec(args1);
// [文件604:-rw----r--,给此文件目录下的文件设置读写权限]
String[] args2 = { "chmod", "604", outFileName };
exec(args2);
// 点击安装PendingIntent
File updateFile = new File(outFileName);
// String path = Utils.getAppFilesDir(context);
// File updateFile = new File(path +"/ecoder/"+ outFileName);
final Uri uri = Uri.fromFile(updateFile);
final Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType(uri, "application/vnd.android.package-archive");
installIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivityForResult(installIntent, 8);
((Activity) context).overridePendingTransition(R.anim.fade, R.anim.hold);
isClicked = true;
// finish();
}
public static void setingCheckAPPEcoderDialog(final Activity context) {
Dialog dialog = null;
AlertDialog.Builder ad = new AlertDialog.Builder(context);
ad.setTitle("提示");
ad.setMessage("需要安装辅助解码器");
ad.setPositiveButton("安装", new DialogInterface.OnClickListener() {// 退出按钮
public void onClick(DialogInterface dialog, int i) {
if (isClicked) {
isClicked = false;
if (isNEON) {
Utils.copyAssetsToSdcard(context, ECODER_2, ECODER_2);
} else {
Utils.copyAssetsToSdcard(context, ECODER_1, ECODER_1);
}
}
if (dialog != null)
dialog.dismiss();
// context.finish();
// ((Activity) context).overridePendingTransition(
// R.anim.fade, R.anim.hold);
}
});
/*
* ad.setNegativeButton("取消", new DialogInterface.OnClickListener() {
*
* public void onClick(DialogInterface dialog, int i) {
* dialog.dismiss(); context.finish(); ((Activity)
* context).overridePendingTransition(R.anim.fade, R.anim.hold); } });
*/
if (dialog == null) {
dialog = ad.create();
}
if (dialog != null) {
dialog.show();// 显示对话框
}
}
private static boolean isClicked = true;
private static void checkAPPEcoderDialog(final Activity context) {
Dialog dialog = null;
AlertDialog.Builder ad = new AlertDialog.Builder(context);
ad.setTitle("提示");
ad.setMessage("需要安装辅助解码器");
ad.setPositiveButton("安装", new DialogInterface.OnClickListener() {// 退出按钮
public void onClick(DialogInterface dialog, int i) {
if (isClicked) {
isClicked = false;
if (isNEON) {
Utils.copyAssetsToSdcard(context, ECODER_2, ECODER_2);
} else {
Utils.copyAssetsToSdcard(context, ECODER_1, ECODER_1);
}
}
if (dialog != null)
dialog.dismiss();
}
});
ad.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {
dialog.dismiss();
context.finish();
((Activity) context).overridePendingTransition(R.anim.fade, R.anim.hold);
}
});
if (dialog == null) {
dialog = ad.create();
}
if (dialog != null) {
dialog.show();// 显示对话框
}
/*
* Dialog dialog = null; Dialog.Builder customBuilder = new
* Dialog.Builder(context);
* customBuilder.setTitle("提示").setMessage("播放该影片时需要安装第三方解码器(Vitamio)")
* .setPositiveButton("安装", new DialogInterface.OnClickListener() {
* public void onClick(DialogInterface dialog, int which) {
* Utils.copyAssetsToSdcard(context, "ARMv7.apk", "ARMv7.apk");
* dialog.dismiss(); // context.finish(); // ((Activity)
* context).overridePendingTransition( // R.anim.fade, R.anim.hold);
*
* } })
*
* .setNegativeButton("取消", new DialogInterface.OnClickListener() {
* public void onClick(DialogInterface dialog, int which) {
* dialog.dismiss(); context.finish(); ((Activity)
* context).overridePendingTransition( R.anim.fade, R.anim.hold); } });
*
* dialog = customBuilder.create(); dialog.show();
*/}
public static String checkCurrentEcoder(Activity context) {
String ecader = "还没有安装解码器";
try {
boolean ARMv7_NEON = Utils.checkAPP(context, "io.vov.vitamio");
boolean ARMv7 = Utils.checkAPP(context, "io.vov.vitamio.v7vfpv3");
boolean ARMv6 = Utils.checkAPP(context, "io.vov.vitamio.v6");
boolean VFP = Utils.checkAPP(context, "io.vov.vitamio.v6vfp");
if (ARMv7_NEON) {
ecader = "ARMv7_NEON.apk";
} else if (ARMv7) {
ecader = "ARMv7.apk";
} else if (ARMv6) {
ecader = "ARMv6.apk";
} else if (VFP) {
ecader = "VFP.apk";
} else {
ecader = "还没有安装解码器";
}
} catch (Exception e) {
return ecader;
}
return ecader;
}
public static boolean checkAPPEcoder(Activity context) {
boolean ARMv7_NEON = Utils.checkAPP(context, "io.vov.vitamio");
boolean ARMv6 = Utils.checkAPP(context, "io.vov.vitamio.v6");
boolean VFP = Utils.checkAPP(context, "io.vov.vitamio.v6vfp");
boolean ARMv7 = Utils.checkAPP(context, "io.vov.vitamio.v7vfpv3");
if (!ARMv7_NEON && !ARMv7 && !VFP && !ARMv6) {
checkAPPEcoderDialog(context);
return false;
} else {
return true;
}
}
public static boolean setingCheckAPPEcoder(Activity context) {
boolean ARMv7_NEON = Utils.checkAPP(context, "io.vov.vitamio");
boolean ARMv6 = Utils.checkAPP(context, "io.vov.vitamio.v6");
boolean VFP = Utils.checkAPP(context, "io.vov.vitamio.v6vfp");
boolean ARMv7 = Utils.checkAPP(context, "io.vov.vitamio.v7vfpv3");
if (!ARMv7_NEON && !ARMv7 && !VFP && !ARMv6) {
setingCheckAPPEcoderDialog(context);
return false;
} else {
return true;
}
}
public static boolean checkPlayerAPPEcoder(Activity context) {
boolean ARMv7_NEON = Utils.checkAPP(context, "io.vov.vitamio");
boolean ARMv6 = Utils.checkAPP(context, "io.vov.vitamio.v6");
boolean VFP = Utils.checkAPP(context, "io.vov.vitamio.v6vfp");
boolean ARMv7 = Utils.checkAPP(context, "io.vov.vitamio.v7vfpv3");
if (!ARMv7_NEON && !ARMv7 && !VFP && !ARMv6) {
return false;
} else {
return true;
}
}
public static boolean checkUri(Context context, Uri uri) {
boolean isUri = false;
try {
if (uri != null) {
if (uri.toString() != null && uri.toString().contains("http") && uri.getScheme() != null
&& uri.getScheme().toLowerCase().contains("http")) {
isUri = true;
} else if (uri.toString() != null && uri.toString().contains("rtsp") && uri.getScheme() != null
&& uri.getScheme().toLowerCase().contains("mms")) {
isUri = true;
} else {
isUri = false;
}
LogUtil.i(TAG, "---checkUri()--getScheme()==" + uri.getScheme());
}
} catch (Exception e) {
return isUri;
}
return isUri;
}
/**
* 执行Linux命令,并返回执行结果。用于得到data/data/installpackage/xxx.file目录及文件的安装权限(读写权限)
*/
public static String exec(String[] args) {
String result = "";
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process process = null;
InputStream errIs = null;
InputStream inIs = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read = -1;
process = processBuilder.start();
errIs = process.getErrorStream();
while ((read = errIs.read()) != -1) {
baos.write(read);
}
// baos.write('/n');
inIs = process.getInputStream();
while ((read = inIs.read()) != -1) {
baos.write(read);
}
byte[] data = baos.toByteArray();
result = new String(data);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (errIs != null) {
errIs.close();
}
if (inIs != null) {
inIs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (process != null) {
process.destroy();
}
}
return result;
}
public static String readAssetsToString(Activity context, String assetsFileName) {
InputStream is = null;
String temStr = null;
try {
is = context.getAssets().open(assetsFileName);
if (is != null) {
StringBuilder sb = new StringBuilder();
String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while ((line = reader.readLine()) != null) {
sb.append(line);
}
if (sb != null) {
temStr = sb.toString();
}
return temStr;
}
} catch (IOException e) {
e.printStackTrace();
return temStr;
} finally {
try {
if (is != null)
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return temStr;
}
public static boolean isUri(Context context, Uri uri) {
boolean isUri = false;
try {
if (uri != null) {
if (uri.toString() != null && uri.toString().contains("http") || uri.toString().contains("www")
|| uri.toString().contains("rtsp") || uri.toString().contains("file")
|| uri.toString().contains("mms")) {
isUri = true;
} else {
isUri = false;
}
LogUtil.i(TAG, "---checkUri()--getScheme()==" + uri.getScheme());
}
} catch (Exception e) {
return isUri;
}
return isUri;
}
public static boolean isCheckUriByM3u8(Context context, Uri uri) {
boolean isUri = false;
try {
if (uri != null) {
if (uri.toString() != null && uri.toString().toLowerCase().contains("m3u8")
|| uri.toString().contains("rtsp")) {
isUri = true;
} else {
isUri = false;
}
LogUtil.i(TAG, "---checkUri()--getScheme()==" + uri.getScheme());
}
} catch (Exception e) {
return isUri;
}
return isUri;
}
public static void netCheckDialog() {// 退出确认
AlertDialog.Builder ad = new AlertDialog.Builder(BaseActivity.mBaseActivity);
ad.setTitle("提示");
ad.setMessage("网络不可用,请检查网络再试");
ad.setPositiveButton("确定", new DialogInterface.OnClickListener() {// 退出按钮
public void onClick(DialogInterface dialog, int i) {
}
});
/*
* ad.setNegativeButton("取消", new DialogInterface.OnClickListener() {
*
* @Override public void onClick(DialogInterface dialog, int i) { } });
*/
ad.show();// 显示对话框
}
public static void netNoPlayeDialog() {// 退出确认
AlertDialog.Builder ad = new AlertDialog.Builder(BaseActivity.mBaseActivity);
ad.setTitle("提示");
ad.setMessage("暂时只支持android_2.1以上系统");
ad.setPositiveButton("确定", new DialogInterface.OnClickListener() {// 退出按钮
public void onClick(DialogInterface dialog, int i) {
}
});
/*
* ad.setNegativeButton("取消", new DialogInterface.OnClickListener() {
*
* @Override public void onClick(DialogInterface dialog, int i) { } });
*/
ad.show();// 显示对话框
}
public static boolean isVideoFile(String end) {
boolean isVideo = false;
if (end.equals("3gp") || end.equals("mp4") || end.equals("ndivx") || end.equals("xvid") || end.equals("flv")
|| end.equals("ts") || end.equals("rmvb") || end.equals("rm") || end.equals("mkv") || end.equals("mov")
|| end.equals("avi") || end.equals("mpg") || end.equals("v8") || end.equals("asf") || end.equals("wmv")
|| end.equals("ram") || end.equals("mpeg") || end.equals("swf") || end.equals("3gpp")
|| end.equals("m2v") || end.equals("asx") || end.equals("ra") || end.equals("3g2")
|| end.equals("3gpp2") || end.equals("divx") || end.equals("f4v") || end.equals("rv")
)
{
isVideo = true;
} else {
isVideo = false;
}
return isVideo;
}
public static boolean isMusicFile(String end) {
boolean isMusic = false;
if (end.equals("m4a") || end.equals("mp3") || end.equals("mid") || end.equals("xmf") || end.equals("ogg")
|| end.equals("wav") || end.equals("wma") || end.equals("aac") || end.equals("mpa")
|| end.equals("midi") || end.equals("ar")
) {
isMusic = true;
} else {
isMusic = false;
}
return isMusic;
}
public static void startSystemPlayer(Context context, ArrayList<VideoInfo> mCurrentPlayList, int position) {
Intent intent = new Intent(context, SystemPlayer.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable("MediaIdList", mCurrentPlayList);
intent.putExtras(mBundle);
intent.putExtra("CurrentPosInMediaIdList", position);
context.startActivity(intent);
((Activity) BaseActivity.mBaseActivity).overridePendingTransition(R.anim.fade, R.anim.hold);
}
}