package com.secondworld.univeralsdk; import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PermissionInfo; 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.Process; import android.provider.Settings; import android.support.v4.content.PermissionChecker; import android.widget.Toast; import com.unity3d.player.UnityPlayer; import org.json.JSONObject; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.URL; import java.net.URLConnection; import java.util.Enumeration; import java.util.Map; /** * Created by Administrator on 2018/6/15 0015. */ public class UniversalUtil { private final static String TAG = "UniversalUtil"; /** * 获得应用的版本号 */ public static String GetVersionName(Context context) { PackageManager _packageManager = context.getPackageManager(); PackageInfo _packageInfo = null; try { _packageInfo = _packageManager.getPackageInfo(context.getPackageName(), 0); } catch (Exception e) { e.printStackTrace(); } if (_packageInfo != null) { return _packageInfo.versionName; } return null; } public static void sendMessageToUnity(Map jsonMap) { if (jsonMap == null || jsonMap.isEmpty()) { return; } JSONObject _jsonObject = new JSONObject(jsonMap); UnityPlayer.UnitySendMessage(StaticDefine.UnityGameObjectName, StaticDefine.UnityHandleFuncName, _jsonObject.toString()); } public static void InstallAPK(Context context, final String path) { File _file = new File(path); if (_file == null) { Toast.makeText(context, "给定的地址[" + path + "]找不到要安装的应用文件", Toast.LENGTH_SHORT).show(); return; } try { Intent _intent = new Intent(Intent.ACTION_VIEW); // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) // { // _intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Uri _contentUri = FileProvider.getUriForFile(context, // context.getPackageName() + ".fileProvider", // _file); // _intent.setDataAndType(_contentUri, "application/vnd.android.package-archive"); // } // else // { _intent.setDataAndType(Uri.fromFile(_file), "application/vnd.android.package-archive"); _intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // } context.startActivity(_intent); } catch (Exception e) { e.printStackTrace(); Toast.makeText(context, "找不到打开此类型文件的程序", Toast.LENGTH_SHORT).show(); } } public static void CopyTextToClipboard(final Activity activity, final String text) { activity.runOnUiThread(new Runnable() { @Override public void run() { ClipboardManager _mgr = (ClipboardManager) activity.getSystemService( Context.CLIPBOARD_SERVICE); ClipData _data = ClipData.newPlainText("playerId", text); _mgr.setPrimaryClip(_data); } }); } public static long getMemTotal() { try { FileReader fileReader = new FileReader("/proc/meminfo"); BufferedReader bufferedReader = new BufferedReader(fileReader, 4 * 1024); String str; while ((str = bufferedReader.readLine()) != null) { if (str.contains("MemTotal")) { break; } } bufferedReader.close(); fileReader.close(); String[] array = str.split("\\s+"); // 获得系统总内存,单位是KB return Integer.valueOf(array[1]).intValue(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return 0; } public static String getPublicIp(boolean useHttps) { String _ip; try { URL ipify = useHttps ? new URL("https://api.ipify.org") : new URL( "http://api.ipify.org"); URLConnection conn = ipify.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); _ip = in.readLine(); in.close(); } catch (IOException e) { e.printStackTrace(); } return ""; } public static String getIP(Context context) { NetworkInfo info = ((ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); if (info != null && info.isConnected()) { if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//当前使用2G/3G/4G网络 try { for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { return inetAddress.getHostAddress(); } } } } catch (SocketException e) { e.printStackTrace(); } } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//当前使用无线网络 WifiManager wifiManager = (WifiManager) context.getSystemService( Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); return intIP2StringIP(wifiInfo.getIpAddress()); } } else { //当前无网络连接,请在设置中打开网络 } return null; } private static String intIP2StringIP(int ip) { return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "." + (ip >> 24 & 0xFF); } public static boolean hasRWP = false; public static boolean hasGoToSetting = false; public static void CheckWriteAndReadExternalStorage(final Activity activity) { //Log.i("MainActivity", "CheckWriteAndReadExternalStorage 开始 hasGoToSetting: " + hasGoToSetting); if (hasRWP && !hasGoToSetting) { //Log.i("MainActivity", "1111 有权限"); return; } if (PermissionChecker.checkPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE, Process.myPid(), Process.myUid(), activity.getPackageName()) == PackageManager.PERMISSION_GRANTED) { //Log.i("MainActivity", "有权限"); hasRWP = true; if (hasGoToSetting) { //Log.i("MainActivity", "去过设置界面, 这里重启"); activity.runOnUiThread(new Runnable() { @Override public void run() { new Thread() { public void run() { String _packageName = activity.getPackageName(); Intent _launch = activity.getBaseContext().getPackageManager().getLaunchIntentForPackage( _packageName); _launch.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); activity.startActivity(_launch); Process.killProcess(Process.myPid()); } }.start(); activity.finish(); } }); } return; } if (!hasRWP) { new AlertDialog.Builder(activity) .setMessage("应用没有存储读取权限,点击确定至设置中开启,否则无法继续游戏.") .setCancelable(false) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { UniversalUtil.hasGoToSetting = true; Intent intent = new Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromParts("package", activity.getPackageName(), null); intent.setData(uri); activity.startActivity(intent); } }) .setNegativeButton("拒绝", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { activity.finish(); } }) .show(); } } public static boolean checkPermission22(Activity activity, String permission) { PackageManager _pkgMgr = activity.getPackageManager(); LogUtil.i(TAG, "开始检测权限: " + permission); try { PermissionInfo _info = _pkgMgr.getPermissionInfo(permission, PackageManager.GET_META_DATA); LogUtil.i(TAG, " |-- 保护级别: " + _info.protectionLevel); if (_info.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS && _info.protectionLevel != 4097) { LogUtil.i(TAG, " |-- 不是危险权限."); return false; } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } int _result = PermissionChecker.checkPermission(activity, permission, Process.myPid(), Process.myUid(), activity.getPackageName()); LogUtil.i(TAG, " |-- 获取类型: " + _result); if (_result == PackageManager.PERMISSION_GRANTED) { LogUtil.i(TAG, permission + " 有这个权限."); return false; } return true; } public static String getMetaString(Activity activity, String key) { PackageManager _pkgMgr = activity.getPackageManager(); ApplicationInfo _appInfo; try { _appInfo = _pkgMgr.getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA); return _appInfo.metaData.getString(key); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return null; } public static int getMetaInt(Activity activity, String key) { LogUtil.i(TAG, "将要获取的MetaKey: " + key); PackageManager _pkgMgr = activity.getPackageManager(); ApplicationInfo _appInfo; try { _appInfo = _pkgMgr.getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA); return _appInfo.metaData.getInt(key); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return -1; } public static boolean isEmpty(String s) { if (null == s) return true; if (s.length() == 0) return true; if (s.trim().length() == 0) return true; return false; } }