百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Android TV 开发需要用到的一些功能源码_android tv app开发

toyiye 2024-04-03 23:10 18 浏览 0 评论

此文大部分内容为转发,但作为开发Android TV的重要部分,也还是转发一下,省的读者到处找。

包括:设备、存储、内存、网络、蓝牙等

1 设备基本信息获取

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import android.os.Build;
import android.util.Log;
public class BuildHelper {
 private static final String TAG = BuildHelper.class.getSimpleName();
 /**
 * Build class所有的字段属性
 * Build.BOARD : Z91
 * Build.BOOTLOADER : unknown
 * Build.BRAND : FaDi
 * Build.CPU_ABI : arm64-v8a
 * Build.CPU_ABI2 :
 * Build.DEVICE : Z91
 * Build.DISPLAY : TEST_FaDi_Z91_S100_20180108
 * Build.FINGERPRINT : FaDi/Z91/Z91:7.1.1/N6F26Q/1515397384:user/release-keys
 * Build.HARDWARE : mt6739
 * Build.HOST : 69959bbb90c6
 * Build.ID : N6F26Q
 * Build.IS_DEBUGGABLE : true
 * Build.IS_EMULATOR : false
 * Build.MANUFACTURER : FaDi
 * Build.MODEL : Z91
 * Build.PERMISSIONS_REVIEW_REQUIRED : false
 * Build.PRODUCT : Z91
 * Build.RADIO : unknown
 * Build.SERIAL : 0123456789ABCDEF
 * Build.SUPPORTED_32_BIT_ABIS : [Ljava.lang.String;@305cf5e
 * Build.SUPPORTED_64_BIT_ABIS : [Ljava.lang.String;@f5c1f3f
 * Build.SUPPORTED_ABIS : [Ljava.lang.String;@578b00c
 * Build.TAG : Build
 * Build.TAGS : release-keys
 * Build.TIME : 1515397382000
 * Build.TYPE : user
 * Build.UNKNOWN : unknown
 * Build.USER : FaDi
 * Build.VERSION.ACTIVE_CODENAMES : [Ljava.lang.String;@f4ecd55
 * Build.VERSION.ALL_CODENAMES : [Ljava.lang.String;@bdb836a
 * Build.VERSION.BASE_OS :
 * Build.VERSION.CODENAME : REL
 * Build.VERSION.INCREMENTAL : 1515397384
 * Build.VERSION.PREVIEW_SDK_INT : 0
 * Build.VERSION.RELEASE : 7.1.1
 * Build.VERSION.RESOURCES_SDK_INT : 25
 * Build.VERSION.SDK : 25
 * Build.VERSION.SDK_INT : 25
 * Build.VERSION.SECURITY_PATCH : 2017-11-05
 */
 public static List<String> getAllBuildInformation() {
 List<String> result = new ArrayList<>();
 Field[] fields = Build.class.getDeclaredFields();
 for (Field field : fields) {
 try {
 field.setAccessible(true);
 String info = "Build." + field.getName() + " : " + field.get(null);
 Log.w(TAG, info);
 result.add(info);
 } catch (Exception e) {
 Log.e(TAG, "an error occured when collect crash info", e);
 }
 }
 Field[] fieldsVersion = Build.VERSION.class.getDeclaredFields();
 for (Field field : fieldsVersion) {
 try {
 field.setAccessible(true);
 String info = "Build.VERSION." + field.getName() + " : " + field.get(null);
 Log.w(TAG, info);
 result.add(info);
 } catch (Exception e) {
 Log.e(TAG, "an error occured when collect crash info", e);
 }
 }
 return result;
 }
 // 手机制造商
 public static String getProduct() {
 return Build.PRODUCT;
 }
 // 系统定制商
 public static String getBrand() {
 return Build.BRAND;
 }
 // 硬件制造商
 public static String getManufacturer() {
 return Build.MANUFACTURER;
 }
 // 平台信息
 public static String getHardWare() {
 String result = Build.HARDWARE;
 if (result.matches("qcom")) {
 Log.d(TAG, "Qualcomm platform");
 result = "高通平台(Qualcomm) - " + result;
 } else if (result.matches("mt[0-9]*")) {
 result = "MTK平台(MediaTek) - " + result;
 }
 return result;
 }
 // 型号
 public static String getMode() {
 return Build.MODEL;
 }
 // Android 系统版本
 public static String getAndroidVersion() {
 return Build.VERSION.RELEASE;
 }
 // CPU 指令集,可以查看是否支持64位
 public static String getCpuAbi() {
 return Build.CPU_ABI;
 }
 public static boolean isCpu64() {
 boolean result = false;
 if (Build.CPU_ABI.contains("arm64")) {
 result = true;
 }
 return result;
 }
 // 显示模块
 public static String getDisplay() {
 return Build.DISPLAY;
 }
 // SDK 当前版本号
 public static int getCurSDK() {
 return Build.VERSION.SDK_INT;
 }
}

2 手机属性值获取

import android.os.Build;
import android.util.Log;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * 属性文件
 * /init.rc
 * <p/>
 * /default.prop
 * <p/>
 * /system/build.prop
 */
public class PropInfoUtil {
 private static final String TAG = PropInfoUtil.class.getSimpleName();
 public static List<String> getPropInfo() {
 List<String> result = new ArrayList<>();
 try {
 String line;
 BufferedReader br = new BufferedReader(new FileReader("/default.prop"));
 result.add("*** Read From /default.prop ***");
 while ((line = br.readLine()) != null) {
 result.add(line);
 }
 result.add("*** Read From /system/build.prop ***");
 br = new BufferedReader(new FileReader("/system/build.prop"));
 while ((line = br.readLine()) != null) {
 result.add(line);
 }
 /*
 (Permission denied)
 result.add("*** Read From /init.rc ***");
 Log.d(TAG, "*** Read From /init.rc ***");
 br = new BufferedReader(new FileReader("/init.rc"));
 while ((line = br.readLine()) != null) {
 result.add(line);
 Log.d(TAG, line);
 }
 */
 br.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 return result;
 }
 /**
 * Java VM 虚拟机
 *
 * @return
 */
 public static String getJavaVM() {
 String result = null;
 result = System.getProperty("java.vm.name");
 if (result != null) {
 result = result + System.getProperty("java.vm.version");
 }
 return result;
 }
 /**
 * 内核架构
 *
 * @return
 */
 public static String getKernelArchitecture() {
 return System.getProperty("os.arch");
 }
 /**
 * 内核版本
 *
 * @return
 */
 public static String getKernelVersion() {
 return System.getProperty("os.version") + " (" + Build.VERSION.INCREMENTAL + ")";
 }
}

3 手机存储卡信息获取

import android.app.ActivityManager;
import android.content.Context;
import android.os.Environment;
import android.os.StatFs;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.Log;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
public class SystemUtils {
 /**
 * OpenGL ES 版本
 *
 * @param mContext
 * @return
 */
 public static String getOpenGlVersion(Context mContext) {
 return ((ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE)).getDeviceConfigurationInfo().getGlEsVersion();
 }
 /**
 * 获得SD卡总大小
 *
 * @return
 */
 public static String getSDTotalSize(Context mContext) {
 File path = Environment.getExternalStorageDirectory();
 StatFs stat = new StatFs(path.getPath());
 long blockSize = stat.getBlockSize();
 long totalBlocks = stat.getBlockCount();
 return Formatter.formatFileSize(mContext, blockSize * totalBlocks);
 }
 /**
 * 获得sd卡剩余容量,即可用大小
 *
 * @return
 */
 public static String getSDAvailableSize(Context mContext) {
 File path = Environment.getExternalStorageDirectory();
 StatFs stat = new StatFs(path.getPath());
 long blockSize = stat.getBlockSize();
 long availableBlocks = stat.getAvailableBlocks();
 return Formatter.formatFileSize(mContext, blockSize * availableBlocks);
 }
 /**
 * 获得机身ROM总大小
 *
 * @return
 */
 public static String getRomTotalSize(Context mContext) {
 File path = Environment.getDataDirectory();
 StatFs stat = new StatFs(path.getPath());
 long blockSize = stat.getBlockSize();
 long totalBlocks = stat.getBlockCount();
 return Formatter.formatFileSize(mContext, blockSize * totalBlocks);
 }
 /**
 * 获得机身可用ROM
 *
 * @return
 */
 public static String getRomAvailableSize(Context mContext) {
 File path = Environment.getDataDirectory();
 StatFs stat = new StatFs(path.getPath());
 long blockSize = stat.getBlockSize();
 long availableBlocks = stat.getAvailableBlocks();
 return Formatter.formatFileSize(mContext, blockSize * availableBlocks);
 }
 public static boolean isRooted() {
 // nexus 5x "/su/bin/"
 String[] paths = {"/system/xbin/", "/system/bin/", "/system/sbin/", "/sbin/", "/vendor/bin/", "/su/bin/"};
 try {
 for (int i = 0; i < paths.length; i++) {
 String path = paths[i] + "su";
 if (new File(path).exists()) {
 String execResult = exec(new String[]{"ls", "-l", path});
 Log.d("cyb", "isRooted=" + execResult);
 if (TextUtils.isEmpty(execResult) || execResult.indexOf("root") == execResult.lastIndexOf("root")) {
 return false;
 }
 return true;
 }
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 return false;
 }
 private static String exec(String[] exec) {
 String ret = "";
 ProcessBuilder processBuilder = new ProcessBuilder(exec);
 try {
 Process process = processBuilder.start();
 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
 String line;
 while ((line = bufferedReader.readLine()) != null) {
 ret += line;
 }
 process.getInputStream().close();
 process.destroy();
 } catch (Exception e) {
 e.printStackTrace();
 }
 return ret;
 }
}

4 屏幕信息获取

import android.app.Activity;
import android.content.Context;
import android.graphics.Point;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.WindowManager;
import com.fadisu.cpurun.R;
import com.fadisu.cpurun.bean.ScreenInfo;
public class ScreenUtil {
 // 将px值转换为dip或dp值,保证尺寸大小不变
 public static int px2dip(Context context, float pxValue) {
 final float scale = context.getResources().getDisplayMetrics().density;
 return (int) (pxValue / scale + 0.5f);
 }
 // 将dip或dp值转换为px值,保证尺寸大小不变
 public static int dip2px(Context context, float dipValue) {
 final float scale = context.getResources().getDisplayMetrics().density;
 return (int) (dipValue * scale + 0.5f);
 }
 // 将px值转换为sp值,保证文字大小不变
 public static int px2sp(Context context, float pxValue) {
 final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
 return (int) (pxValue / fontScale + 0.5f);
 }
 // 将sp值转换为px值,保证文字大小不变
 public static int sp2px(Context context, float spValue) {
 final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
 return (int) (spValue * fontScale + 0.5f);
 }
 // 屏幕宽度(像素)
 public static int getWindowWidth(Activity context) {
 DisplayMetrics metric = new DisplayMetrics();
 context.getWindowManager().getDefaultDisplay().getMetrics(metric);
 return metric.widthPixels;
 }
 // 屏幕高度(像素)
 public static int getWindowHeight(Activity context) {
 DisplayMetrics metric = new DisplayMetrics();
 context.getWindowManager().getDefaultDisplay().getMetrics(metric);
 return metric.heightPixels;
 }
 /**
 * 获得状态栏的高度
 *
 * @param context
 * @return
 */
 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;
 }
 /**
 * 屏幕分辨率
 *
 * @param mContext
 * @return
 */
 public static ScreenInfo getScreenInfo(Context mContext) {
 ScreenInfo result = new ScreenInfo();
 int widthPixels;
 int heightPixels;
 WindowManager w = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
 Display d = w.getDefaultDisplay();
 DisplayMetrics metrics = new DisplayMetrics();
 d.getMetrics(metrics);
 // since SDK_INT = 1;
 widthPixels = metrics.widthPixels;
 heightPixels = metrics.heightPixels;
 // includes window decorations (statusbar bar/menu bar)
 if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) {
 try {
 widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
 heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
 } catch (Exception ignored) {
 ignored.printStackTrace();
 }
 }
 // includes window decorations (statusbar bar/menu bar)
 if (Build.VERSION.SDK_INT >= 17) {
 try {
 Point realSize = new Point();
 Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
 widthPixels = realSize.x;
 heightPixels = realSize.y;
 } catch (Exception ignored) {
 ignored.printStackTrace();
 }
 }
 result.widthPixels = widthPixels;
 result.heightPixels = heightPixels;
 result.screenRealMetrics = widthPixels + " X " + heightPixels;
 result.density = metrics.density;
 result.density_default = metrics.DENSITY_DEFAULT;
 result.densityDpi = metrics.densityDpi;
 result.densityDpiStr = metrics.densityDpi + " dpi";
 result.scaledDensity = metrics.scaledDensity;
 result.xdpi = metrics.xdpi;
 result.ydpi = metrics.ydpi;
 result.size = (Math.sqrt(Math.pow(widthPixels, 2) + Math.pow(heightPixels, 2)) / metrics.densityDpi);
 result.sizeStr = String.format("%.2f", result.size) + mContext.getResources().getString(R.string.sys_inches_unit);
 return result;
 }
}

5 内存信息获取

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MemInfoUtil {
 public static List<String> getMemInfo() {
 List<String> result = new ArrayList<>();
 try {
 String line;
 BufferedReader br = new BufferedReader(new FileReader("/proc/meminfo"));
 while ((line = br.readLine()) != null) {
 result.add(line);
 }
 br.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 return result;
 }
 /* /proc/meminfo
 MemTotal: 2902436 kB
 MemFree: 199240 kB
 MemAvailable: 1088764 kB
 Buffers: 40848 kB
 Cached: 862908 kB
 SwapCached: 54696 kB
 Active: 1222848 kB
 Inactive: 671468 kB
 Active(anon): 758516 kB
 Inactive(anon): 242560 kB
 Active(file): 464332 kB
 Inactive(file): 428908 kB
 Unevictable: 5972 kB
 Mlocked: 256 kB
 SwapTotal: 1048572 kB
 SwapFree: 537124 kB
 Dirty: 12 kB
 Writeback: 0 kB
 AnonPages: 988820 kB
 Mapped: 508996 kB
 Shmem: 4800 kB
 Slab: 157204 kB
 SReclaimable: 57364 kB
 SUnreclaim: 99840 kB
 KernelStack: 41376 kB
 PageTables: 51820 kB
 NFS_Unstable: 0 kB
 Bounce: 0 kB
 WritebackTmp: 0 kB
 CommitLimit: 2499788 kB
 Committed_AS: 76292324 kB
 VmallocTotal: 258867136 kB
 VmallocUsed: 0 kB
 VmallocChunk: 0 kB
 CmaTotal: 0 kB
 CmaFree: 0 kB
 */
 public static String getFieldFromMeminfo(String field) throws IOException {
 BufferedReader br = new BufferedReader(new FileReader("/proc/meminfo"));
 Pattern p = Pattern.compile(field + "\\s*:\\s*(.*)");
 try {
 String line;
 while ((line = br.readLine()) != null) {
 Matcher m = p.matcher(line);
 if (m.matches()) {
 return m.group(1);
 }
 }
 } finally {
 br.close();
 }
 return null;
 }
 public static String getMemTotal() {
 String result = null;
 try {
 result = getFieldFromMeminfo("MemTotal");
 } catch (IOException e) {
 e.printStackTrace();
 }
 return result;
 }
 public static String getMemAvailable() {
 String result = null;
 try {
 result = getFieldFromMeminfo("MemAvailable");
 } catch (IOException e) {
 e.printStackTrace();
 }
 return result;
 }
}

6 检测网络链接

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.provider.Settings;
import android.util.Log;
/**
 * 关于网络的判断和设置
 */
public class NetworkUtils {
 /** 网络不可用 */
 public static final int NO_NET_WORK = 0;
 /** 是wifi连接 */
 public static final int WIFI = 1;
 /** 不是wifi连接 */
 public static final int NO_WIFI = 2;
 private NetworkUtils(){
 /* cannot be instantiated */
 throw new UnsupportedOperationException("cannot be instantiated");
 }
 /**
 * 判断是否打开网络
 * @param context
 * @return
 */
 public static boolean isNetWorkAvailable(Context context){
 boolean isAvailable = false ;
 ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo networkInfo = cm.getActiveNetworkInfo();
 if(networkInfo!=null && networkInfo.isAvailable()){
 isAvailable = true;
 }
 Log.d("WIFI",isAvailable+"");
 return isAvailable;
 }
 /**
 * 获取网络类型
 * @param context
 * @return
 */
 public static int getNetWorkType(Context context) {
 if (!isNetWorkAvailable(context)) {
 return NetworkUtils.NO_NET_WORK;
 }
 ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 // cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 if (cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting())
 return NetworkUtils.WIFI;
 else
 return NetworkUtils.NO_WIFI;
 }
 /**
 * 判断当前网络是否为wifi
 * @param context
 * @return 如果为wifi返回true;否则返回false
 */
 @SuppressWarnings("static-access")
 public static boolean isWiFiConnected(Context context){
 ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo networkInfo = manager.getActiveNetworkInfo();
 return networkInfo.getType() == manager.TYPE_WIFI ? true : false;
 }
 /**
 * 判断MOBILE网络是否可用
 * @param context
 * @return
 * @throws Exception
 */
 public static boolean isMobileDataEnable(Context context){
 ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 boolean isMobileDataEnable = false;
 isMobileDataEnable = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
 return isMobileDataEnable;
 }
 /**
 * 判断wifi 是否可用
 * @param context
 * @return
 * @throws Exception
 */
 public static boolean isWifiDataEnable(Context context){
 ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 boolean isWifiDataEnable = false;
 isWifiDataEnable = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
 return isWifiDataEnable;
 }
 /**
 * 跳转到网络设置页面
 * @param activity
 */
 public static void GoSetting(Activity activity){
 Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
 activity.startActivity(intent);
 }
 /**
 * 打开网络设置界面
 */
 public static void openSetting(Activity activity) {
 Intent intent = new Intent("/");
 ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");
 intent.setComponent(cn);
 intent.setAction("android.intent.action.VIEW");
 activity.startActivityForResult(intent, 0);
 }
}

7 蓝牙

BluetoothAdapter blueadapter = BluetoothAdapter.getDefaultAdapter();
if (blueadapter == null) {
 bluetools.setVisibility(View.GONE);
}

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码