/**
* ClassName: MyApp.java
* created on 2013-1-24
* Copyrights 2013-1-24 hjgang All rights reserved.
* site: http://t.qq.com/hjgang2012
* email: hjgang@yahoo.cn
*/
package com.shunzhi.parent.util;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.Intent.ShortcutIconResource;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.view.Window;
import android.view.WindowManager;
import com.shunzhi.parent.R;
import java.io.File;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import timber.log.Timber;
/**
* 获取系统信息的工具类
* @author hjgang
*/
public class SystemHelper {
private SystemHelper() {
}
/**
* 创建本应用的桌面快捷方式
* 注意:需要添加权限<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
* @param
*/
public static void createShortcut(Context context, Class> clazz) {
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
//快捷方式的名称
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getString(R.string.app_name));
shortcut.putExtra("duplicate", false); //不允许重复创建
Intent localIntent2 = new Intent(context, clazz);
localIntent2.setAction(Intent.ACTION_MAIN);
localIntent2.addCategory(Intent.CATEGORY_LAUNCHER);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, localIntent2);//指定快捷方式要启动的Activity类型
//快捷方式的图标
ShortcutIconResource iconResource = ShortcutIconResource.fromContext(context, R.drawable.logo);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
context.sendBroadcast(shortcut);
}
/**
* 字符串转换成date
* @param time
* @return
*/
public static Date getDateTime1(String time) {
Date newtime = null;
SimpleDateFormat sdfDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
if (time != null && !time.equals("0")) {
newtime = sdfDateFormat.parse(time);
}
} catch (Exception err) {
}
return newtime;
}
/**
* 将字符串转为 时间戳
* @param time
* @return
*/
public static String getTimestamp(String time) {
Date newtime = null;
SimpleDateFormat sdfDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
if (time != null && !time.equals("0")) {
newtime = sdfDateFormat.parse(time);
}
} catch (Exception err) {
}
return newtime.getTime() + "";
}
/**
* 将时间戳转为 字符串
* yyyy-MM-dd HH:mm
* */
public static String getTimeStr(String time) {
String newtime = null;
SimpleDateFormat sdfDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
if (time != null && !time.equals("0")) {
newtime = sdfDateFormat.format(new Timestamp(Long.parseLong(time)));
}
return newtime;
}
/**
* 将时间戳转为 字符串
* yyyy-MM-dd
* */
public static String getTimeStr3(String time) {
String newtime = null;
SimpleDateFormat sdfDateFormat = new SimpleDateFormat("yyyy-MM-dd");
if (time != null && !time.equals("0")) {
newtime = sdfDateFormat.format(new Date(Long.parseLong(time) * 1000));
}
return newtime;
}
// 将字符串转为时间戳
public static String getTime(String time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日hh时mm分");
Date date = null;
if (time == null || "".equals(time) || "null".equals(time)) {
return "0";
}
if (time.contains("年")) {
int year = Integer.parseInt(time.substring(0, time.indexOf("年")));
if (year <= 1970) {
return "0";
}
}
try {
date = format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
return date.getTime() / 1000 + "";
}
// 将字符串转为时间戳
public static String getTime2(String time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
Date date = null;
if (time == null || "".equals(time) || "null".equals(time)) {
return "0";
}
int year = Integer.parseInt(time.substring(0, time.indexOf("年")));
if (year <= 1970) {
return "0";
}
try {
date = format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return date.getTime() / 1000 + "";
}
/**
* @author LuoB.
* @param oldTime 较小的时间
* @param newTime 较大的时间 (如果为空 默认当前时间 ,表示和当前时间相比)
* @return -1 :同一天. 0:昨天 . 1 :至少是前天.
* @throws ParseException 转换异常
*/
public static int isYeaterday(Date oldTime, Date newTime) throws ParseException {
if (newTime == null) {
newTime = new Date();
}
//将下面的 理解成 yyyy-MM-dd 00:00:00 更好理解点
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String todayStr = format.format(newTime);
Date today = format.parse(todayStr);
//昨天 86400000=24*60*60*1000 一天
if ((today.getTime() - oldTime.getTime()) > 0 && (today.getTime() - oldTime.getTime()) <= 86400000) {
return 0;
} else if ((today.getTime() - oldTime.getTime()) <= 0) { //至少是今天
return -1;
} else { //至少是前天
return 1;
}
}
/**
* 检查是否已经创建了桌面快捷方式
* 注意:需要添加权限<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
* @param context
* @return
*/
public static boolean hasShortCut(Context context) {
String url = "";
if (Build.VERSION.SDK_INT < 8) {
url = "content://com.android.launcher.settings/favorites?notify=true";
} else {
url = "content://com.android.launcher2.settings/favorites?notify=true";
}
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(Uri.parse(url), null, "title=?",
new String[]{context.getString(R.string.app_name)}, null);
if (cursor != null && cursor.moveToFirst()) {
cursor.close();
return true;
}
return false;
}
/**
* 获取当前机器的屏幕信息对象
* 另外:通过android.os.Build类可以获取当前系统的相关信息
*
* @param context
* @return
*/
public static DisplayMetrics getScreenInfo(Context context) {
WindowManager windowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(dm);
// dm.widthPixels;//寬度
// dm.heightPixels; //高度
// dm.density; //密度
return dm;
}
public static int dip2px(Context context, double dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
public static int px2dip(Context context, double pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* 获取手机号
* 注意:需要添加权限<uses-permission
* android:name="android.permission.READ_PHONE_STATE"/>。另外很多手机不能获取到当前手机号
*
* @param context
* @return
*/
public static String getMobileNumber(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
}
String deviceid = tm.getDeviceId();//获取智能设备唯一编号
String te1 = tm.getLine1Number();//获取本机号码
String imei = tm.getSimSerialNumber();//获得SIM卡的序号
String imsi = tm.getSubscriberId();//得到用户Id
return tm.getLine1Number();
}
/**
* 检测当前的网络连接是否可用
* 注意:需要添加权限<uses-permission
* android:name="android.permission.ACCESS_NETWORK_STATE"/>
*
* @param context
* @return
*/
public static boolean isConnected(Context context) {
boolean flag = false;
try {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null != connManager) {
NetworkInfo info = connManager.getActiveNetworkInfo();
if (null != info && info.isAvailable()) {
flag = true;
}
}
} catch (Exception e) {
Timber.d(e + "");
}
return flag;
}
/**
* 检测当前网络连接的类型
* 注意:需要添加权限<uses-permission
* android:name="android.permission.ACCESS_NETWORK_STATE"/>
*
* @param context
* @return 返回0代表GPRS网络;返回1,代表WIFI网络;返回-1代表网络不可用
*/
public static int getNetworkType(Context context) {
int code = -1;
try {
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null != connManager) {
State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
if (State.CONNECTED == state) {
code = ConnectivityManager.TYPE_WIFI;
} else {
state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
if (State.CONNECTED == state) {
code = ConnectivityManager.TYPE_MOBILE;
}
}
}
} catch (Exception e) {
Timber.d(e + "");
}
return code;
}
/**
* 返回当前程序版本代码,如:1
* @param context
* @return 当前程序版本代码
*/
public static int getAppVersionCode(Context context) {
int versionCode = -1;
try {
PackageManager pm = context.getApplicationContext().getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
versionCode = pi.versionCode;
} catch (Exception e) {
Timber.d("66666%s" ,e.toString()+ "");
}
return versionCode;
}
/**
* 返回当前程序版本名,如:1.0.1
*
* @param context
* @return 当前程序版本名
*/
public static String getAppVersionName(Context context) {
String versionName = "";
try {
PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
versionName = pi.versionName;
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
/**
* 安装指定的APK文件,主要用于本应用程序的更新
*
* @param context
* @param apk
* apk文件的全路径名
*/
public static void installAPK(Context context, String apk) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(new File(apk)), "application/vnd.android.package-archive");
context.startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
public static void remoteAPK(Context context) {
Uri packageURI = Uri.parse("package:net.shunzhi");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
context.startActivity(uninstallIntent);
}
// public static void setSystemBar(Context context, boolean on, int color) {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// SystemHelper.setTranslucentStatus(context, on);
// SystemBarTintManager mTintManager = new SystemBarTintManager((Activity) context);
// mTintManager.setStatusBarTintEnabled(true);
// //mTintManager.setNavigationBarTintEnabled(true);
// mTintManager.setStatusBarTintResource(color);
//
// //SystemBarTintManager.SystemBarConfig config = mTintManager.getConfig();
// //listViewDrawer.setPadding(0, config.getPixelInsetTop(true), 0, config.getPixelInsetBottom());
// }
// }
@TargetApi(19)
public static void setTranslucentStatus(Context context, boolean on) {
Window win = ((Activity) context).getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
}
}