精华内容
下载资源
问答
  • Android获得摄像头详细信息

    万次阅读 2011-02-24 16:18:00
    Android获取摄像头详细信息  2011-01-05 10:15:26 来源:WEB开发网 【减小字体增大字体 】 关注杨恒飞的微博核心提示: 如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus ...

    Android获取摄像头详细信息

     2011-01-05 10:15:26 来源:WEB开发网 【减小字体 增大字体 】  关注杨恒飞的微博

    核心提示: 如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头的详细信息,Android获取摄像头详细信息,在Android 2.3 SDK中得到了增强:在android.hardware.Camera类中,API Level 9的S

    如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头的详细信息,在Android 2.3 SDK中得到了增强:

    在android.hardware.Camera类中,API Level 9的SDK中加入了两个比较重要的方法,使用getNumberOfCameras这个static类型方法可以获取当前Android设备上的摄像头数 量,比如Nexus S有两个,方法原型如下

    public static int getNumberOfCameras ()

    而对于具体的每个摄像头的信息,可以通过Camera类的getCameraInfo()这个静态方法获取,该方法有两个参数,参数一的ID,我们 通过getNumberOfCameras获取的值减1即可,类似数组索引从0开始一样,用循环遍历每个摄像头信息,参数二是 android.hardware.Camera.CameraInfo类,有关getCameraInfo方法的原型如下:

    public static void getCameraInfo (int cameraId, Camera.CameraInfo cameraInfo)

    对于Camera.CameraInfo类而言,比较简单,包含两个字段

    public int facing 代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置
    public int orientation下面是拍照的旋转方向,一般自然些有0度、90度、180度和270度,这样可以获取我们正确的手握设备是横着还是竖着,有关拍照时的方向设置,可以参考下面的代码设置

    public static void setCameraDisplayOrientation(Activity activity,
    int cameraId, android.hardware.Camera camera) {
    android.hardware.Camera.CameraInfo info =
    new android.hardware.Camera.CameraInfo();
    android.hardware.Camera.getCameraInfo(cameraId, info);
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
    int degrees = 0;
    switch (rotation) {
    case Surface.ROTATION_0: degrees = 0; break;
    case Surface.ROTATION_90: degrees = 90; break;
    case Surface.ROTATION_180: degrees = 180; break;
    case Surface.ROTATION_270: degrees = 270; break;
    }

    int result;
    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
    result = (info.orientation + degrees) % 360;
    result = (360 - result) % 360;// compensate the mirror
    } else {// back-facing
    result = (info.orientation - degrees + 360) % 360;
    }
    camera.setDisplayOrientation(result);
    }
    展开全文
  • Ifconfig 如何获得流量统计信息

    万次阅读 2010-07-14 09:25:00
    本文旨在讲解 Ifconfig 流量信息获得。将通过 Ifconfig 代码阅读来跟踪流量统计的来 源,这将贯通网络模块,proc文件系统,到硬件设备驱动来探寻这些信息来源和流向。Ifconfig Ifconfig是 net-tools...

     

    本文旨在讲解 Ifconfig 流量信息的获得。将通过 Ifconfig 代码阅读来跟踪流量统计的来 源,这将贯通网络模块,proc文件系统,到硬件设备驱动来探寻这些信息的来源和流向。

    Ifconfig

    Ifconfig是 net-tools的一个组件。 net-tools 为 GNU/Linux 提供控制网络子系统的很多 重要工具(arp, ifconfig, netstat...),他几乎成为所有发行版必备的软件。

    来看他的输出情况。包含了基本的网卡信息,内核网络配置。除此之外,还包括了流量统计 信息。笔者开始就抱有非常疑惑的信息,Ifconfig是如何做到这一点的?这样一个高层的应 用程序难道和网卡紧密相连么?正是由于这样的疑问,我才开始了阅读代码的过程。

    wick@ ~: sudo ifconfig eth0
    eth0 Link encap:以太网 硬件地址 00:e0:4c:43:d4:8d
    inet 地址:192.168.16.91 广播:192.168.16.255 掩码:255.255.255.0
    inet6 地址: fe80::2e0:4cff:fe43:d48d/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
    接收数据包:20825 错误:0 丢弃:0 过载:0 帧数:0
    发送数据包:35057 错误:0 丢弃:0 过载:0 载波:0
    碰撞:0 发送队列长度:1000
    接收字节:2225064 (2.2 MB) 发送字节:50827282 (50.8 MB)
    中断:23 基本地址:0xb800

    本篇实例讲解使用到了 —- net-tools-1.60 源码,可以在官方网站找到

    linux-2.6.29 代码

    net-tools/ifconfig.c

    NET_LIB = $(NET_LIB_PATH)/lib$(NET_LIB_NAME).a


    ifconfig: $(NET_LIB) ifconfig.o
    $(CC) $(LDFLAGS) -o ifconfig ifconfig.o $(NLIB) $(RESLIB)
    来自 net-tools 的Makefile告诉我们,ifconfig工具的链接很简单。除了一个库文件以外, 只需要ifconfig.o。默认情况下,没有指明 obj 文件生成方式的,都只是需要单个同名的C 源码文件 ifconfig.c。

    尽快找寻main文件中的参数选项,我们只需要找到列举 eth0 信息的选项分支,其他赶快跳 过。在ifconfig.c:288后以下段落,是我们关注的参数解析过程。

        /* Create a channel to the NET kernel. */
    if ((skfd = sockets_open(0)) < 0) {
    perror("socket");
    exit(1);
    }

    /* Do we have to show the current setup? */
    if (argc == 0) {
    int err = if_print((char *) NULL);
    (void) close(skfd);
    exit(err < 0);
    }
    /* No. Fetch the interface name. */
    spp = argv;
    safe_strncpy(ifr.ifr_name, *spp++, IFNAMSIZ);
    if (*spp == (char *) NULL) {
    int err = if_print(ifr.ifr_name);
    (void) close(skfd);
    exit(err < 0);
    }
    首先,调用NET_LIB中的 sockets_open 函数创建 socket 链接;然后在无参数的情况下, if_print 打印所有网络接口信息;如果有参数,则将参数作为接口名称,将会打印对应接 口信息。后者将是我们 `ifconfig eth0' 的参数情况,而 if_print 是唯一调用函数。

    同一个文件(ifconfig.c)就可以看到if_print函数,看起来很简洁。

    static int if_print(char *ifname)
    {
    int res;

    if (ife_short)
    printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg/n"));

    if (!ifname) {
    res = for_all_interfaces(do_if_print, &opt_a);
    } else {
    struct interface *ife;

    ife = lookup_interface(ifname);
    res = do_if_fetch(ife);
    if (res >= 0)
    ife_print(ife);
    }
    return res;
    }
    首先,如果ife_short有效,则打印表头。这是网络接口信息的简洁模式,使用`ifconfig -s'的效果正式如此,`-s'将设置 ife_short = 1,这在main函数解析参数时候已经完成。 然后,分析参数,我们这里的ifname就是"eth0",因此进入else分支。

    下面深入到lookup_interfaces (lib/interfaces.c)

    struct interface *lookup_interface(char *name)
    {
    struct interface *ife = NULL;

    if (if_readlist_proc(name) < 0)
    return NULL;
    ife = add_interface(name);
    return ife;
    }

    紧跟着是 if_readlist_proc 和 add_interface,一个个来。

    static int if_readlist_proc(char *target)
    {
    static int proc_read;
    FILE *fh;
    char buf[512];
    struct interface *ife;
    int err;

    if (proc_read)
    return 0;
    if (!target)
    proc_read = 1;

    fh = fopen(_PATH_PROCNET_DEV, "r");
    if (!fh) {
    fprintf(stderr, _("Warning: cannot open %s (%s). Limited output./n"),
    _PATH_PROCNET_DEV, strerror(errno));
    return if_readconf();
    }
    fgets(buf, sizeof buf, fh); /* eat line */
    fgets(buf, sizeof buf, fh);

    #if 0 /* pretty, but can't cope with missing fields */
    fmt = proc_gen_fmt(_PATH_PROCNET_DEV, 1, fh,
    "face", "", /* parsed separately */
    "bytes", "%lu",
    "packets", "%lu",
    "errs", "%lu",
    "drop", "%lu",
    "fifo", "%lu",
    "frame", "%lu",
    "compressed", "%lu",
    "multicast", "%lu",
    "bytes", "%lu",
    "packets", "%lu",
    "errs", "%lu",
    "drop", "%lu",
    "fifo", "%lu",
    "colls", "%lu",
    "carrier", "%lu",
    "compressed", "%lu",
    NULL);
    if (!fmt)
    return -1;
    #else
    procnetdev_vsn = procnetdev_version(buf);
    #endif

    err = 0;
    while (fgets(buf, sizeof buf, fh)) {
    char *s, name[IFNAMSIZ];
    s = get_name(name, buf);
    ife = add_interface(name);
    get_dev_fields(s, ife);
    ife->statistics_valid = 1;
    if (target && !strcmp(target,name))
    break;
    }
    if (ferror(fh)) {
    perror(_PATH_PROCNET_DEV);
    err = -1;
    proc_read = 0;
    }

    #if 0
    free(fmt);
    #endif
    fclose(fh);
    return err;
    }
    一大长串,这该是我们现在遇到的最长的函数了,但是这个方法远远比想象的要简单的多, 文件I/O就占据了老长。这个方法就是读取网络接口的列表,从那儿读取呢?我们一眼就看 到了 ————

    fh = fopen(_PATH_PROCNET_DEV, "r");

    在 lib/pathnames.h 中看到其芳踪

    #define _PATH_PROCNET_DEV "/proc/net/dev"

    首先,探测是否已经检测过 网络接口列表,咱们不作浪费时间的无用功。 然后读取 /proc/net/dev,跳过文件的前两行。为啥?自己瞅瞅就知道了。

    wick@ ~: cat /proc/net/dev
    Inter-| Receive | Transmit
    face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
    lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    eth0: 3342410 31393 0 0 0 0 0 0 76194593 52347 0 0 0 0 0 0
    eth1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    接着解析参数,将得到的所有接口加入到列表中去(add_interface),然后依据格式填充 ife结构体(get_dev_fields)。这个结构体是自定义的,可以看到这个结构体是一个链表结 构。get_dev_fields方法填充的是其中一个成员结构体,他在人群中是那么的耀眼:

    struct user_net_device_stats stats;

    他包含的就是统计信息数据,这些数据的来源就是/proc/net/dev。我们作的仅仅是读取这 个文件信息而已……

    你要问,还有其他的信息呢?诸如IP地址,MAC地址,ifconfig如何知道我的网卡是无线有 线的呢?你就需要去看 if_fetch 函数了。从中你可以看到大量的ioctl调用,一切豁然开 朗。

    linux/net/core/dev.c

    立刻来到内核的领地。

    以上总结到统计数据信息的位置坐落于 /proc/net/dev,他是被谁写入的呢?要理解这个问 题,你得先理解 PROC 文件系统。介于时间和能力原因,我只能大概解释, PROC 是内核和 用户空间通讯的又一个接口,PROC fs是一个由软件创建的文件系统,我们需要追根溯源到 创建 /proc/net/dev 的代码文件。

    如果要问我是如何找到创建软件的代码?我不知道。我只知道最蠢的方法,google 和 grep。

    好吧我是直接grep的……于是找到了 /net/core/dev.c。

    /*
    * Called from the PROCfs module. This now uses the new arbitrary sized
    * /proc/net interface to create /proc/net/dev
    */
    static int dev_seq_show(struct seq_file *seq, void *v)
    {
    if (v == SEQ_START_TOKEN)
    seq_puts(seq, "Inter-| Receive "
    " | Transmit/n"
    " face |bytes packets errs drop fifo frame "
    "compressed multicast|bytes packets errs "
    "drop fifo colls carrier compressed/n");
    else
    dev_seq_printf_stats(seq, v);
    return 0;
    }
    我们直接看到这段,注释就包含了 /proc/net/dev 信息,由此可见,友好详细的注释是多 么多么的重要啊…… 直接看方法,dev_seq_show 是文件中定义的struct seq_operations dev_seq_ops的成员, 这就提到了 proc提供的seq接口,他使用简单的迭代器方法,使用 seq_open -> read_proc 就可以直接输出 proc文件的接口信息。如果你不熟悉 PROCfs 和 seq_file 接口,这一部 分会有点凹口。

    简单来说,当你使用open等系统调用打开 /proc/net/dev 的时候,系统将调用 seq_open 函数;相似的,当你使用read时,内核会使用 seq_show 来将实际数据传递到用户空间。我 们的 `cat /proc/net/dev' 输出,就是这里的 dev_seq_show 打印的。

    接着,是 dev_seq_show 中调用的 dev_seq_printf_stats 方法,他仅仅使用到了一个函数。 不用多说,继续深入到dev_get_stats,他将是core模块此行的终点。

    /**
    * dev_get_stats - get network device statistics
    *
    @dev: device to get statistics from
    *
    * Get network statistics from device. The device driver may provide
    * its own method by setting dev->netdev_ops->get_stats; otherwise
    * the internal statistics structure is used.
    */

    const struct net_device_stats *dev_get_stats(struct net_device *dev)
    {
    const struct net_device_ops *ops = dev->netdev_ops;

    if (ops->ndo_get_stats)
    return ops->ndo_get_stats(dev);
    else
    return &dev->stats;
    }
    EXPORT_SYMBOL(dev_get_stats);
    多么有爱的注释啊……如果定义了设备驱动的 get_stats 方法,就调用 get_stats 调用获 得信息,如果没有,直接返回设备写好的数据结构。

    在这里真的需要强调注释的好处,简短的两句话,可以让代码的可读性激增啊!

    感动之后,我们进入驱动,我现在使用的网卡是8139,相关的驱动是 8139too.c。

    linux/drivers/net/8139too.c

    8139too 驱动直接包含在内核里了,我们立刻去关怀他的 get_stats 函数。

    static const struct net_device_ops rtl8139_netdev_ops = {
    .ndo_open = rtl8139_open,
    .ndo_stop = rtl8139_close,
    .ndo_get_stats = rtl8139_get_stats,
    .ndo_validate_addr = eth_validate_addr,
    .ndo_set_mac_address = eth_mac_addr,
    .ndo_start_xmit = rtl8139_start_xmit,
    .ndo_set_multicast_list = rtl8139_set_rx_mode,
    .ndo_do_ioctl = netdev_ioctl,
    .ndo_tx_timeout = rtl8139_tx_timeout,
    #ifdef CONFIG_NET_POLL_CONTROLLER
    .ndo_poll_controller = rtl8139_poll_controller,
    #endif
    };

    哦,简单直接,rtl8139_get_stats

    static struct net_device_stats *rtl8139_get_stats (struct net_device *dev)
    {
    struct rtl8139_private *tp = netdev_priv(dev);
    void __iomem *ioaddr = tp->mmio_addr;
    unsigned long flags;

    if (netif_running(dev)) {
    spin_lock_irqsave (&tp->lock, flags);
    dev->stats.rx_missed_errors += RTL_R32 (RxMissed);
    RTL_W32 (RxMissed, 0);
    spin_unlock_irqrestore (&tp->lock, flags);
    }

    return &dev->stats;
    }
    这个函数实体只是重写了 dev->stats.rx_missed_errors,其他的信息我们直接 return。 网卡状态信息 struct net_device_stats 已经在网卡驱动的其他操作方法中即时更新了。

    总结

    Ifconfig 使用了简单的文件I/O控制,读取 /proc/net/dev 文件来打印流量统计信息。此 文件是 PROCfs 的一个组成,他的操作方法在代码 net/core/dev.c 中,其中 seq 接口的 show 方法可能调用了网卡设备驱动的 get_status 驱动方法来获得网卡信息。这些信息在 网卡操作中会即时更新。

    展开全文
  • 以知乎为例,我们在爬取用户信息的时候,可能一开始的时候关注页面本身的内容,希望通过解析页面的结构来获取想要的数据,实际上我们利用fiddler这样的网络工具,很容易地发现这里面其实有一个用户信息的接口在里面...

    转自 :https://www.wukong.com/answer/6551337387799085316/?iid=43974241203&app=news_article&share_ansid=6551337387799085316&app_id=13&tt_from=mobile_qq&utm_source=mobile_qq&utm_medium=toutiao_ios&utm_campaign=client_share

     

    如果在利用爬虫爬取网页数据的时候,发现是动态生成的时候,目前来看主要表现在以下几种:

    以接口的形式生成数据,这种形式其实挺好处理的,比较典型的是知乎的用户信息,我们只要知道接口的URL,就可以不用再考虑页面本身的内容

    以知乎为例,我们在爬取用户信息的时候,可能一开始的时候关注页面本身的内容,希望通过解析页面的结构来获取想要的数据,实际上我们利用fiddler这样的网络工具,很容易地发现这里面其实有一个用户信息的接口在里面,这样的话我们爬取用户的时候只需要关注此接口的逻辑就可以了。

    如上图所示,上面的接口将用户的信息都返回过来,所以我们通过处理该结果的json格式数据就可以了。

    动态生成的内容直接写入到网页中,这个时候需要渲染引擎来帮助我们将javascript的执行结果渲染出来,splash正是我们需要的引擎,能够方便快捷地帮助我们将javascript的内容渲染出来

    splash是scrapy官方推荐使用的渲染引擎,能够实现并发渲染多个页面、为用户返回页面或者页面截图、在页面中执行自定义的javascript代码等。以京东的图书搜索为例,搜索list中的内容是通过javascript动态生成,我们要爬取其中的内容,就需要将数据渲染出来,利用splash可以很方便地做到这一点。下图是利用splash渲染的代码

    总之,针对不同的形态,我们需要先了解清楚相应的实现原理,然后根据实现原理采取相应的方案来爬取我们需要的数据。

     

    你想通过python代码来判断数据是不是动态生成的,这个目前来说,不好实现,至于利用python进行抓包分析,获取数据的Request URL,这个实现起来复杂,而且没有必要,手动F12很快就能发现答案,数据是不是动态的,一目了然。静态的数据在网页源码中,动态数据不在网页源码中,对比网页显示内容和网页源码,很直观就发现了。

    1.静态数据如下。

    网页显示内容:

    网页源码内容:

    能在网页源码中找到对应的数据,则不是动态加载的。

    2.动态数据如下。

    网页显示内容:

    而实际数据如图,不在网页源码中,动态加载数据:

    至于动态数据URL的话,你可以直接抓包分析就行,实现起来很简单:

    一般情况下,数据页面的URL参数都是有规矩可循的,一页一页的翻转,参数也是固定那几个参数,值的话,会按规律以此递增变化,但是有些网站会进行加密,这个你就要自己好好分析了。普通情况下,动态数据都是个json文件,通过json包或正则表达式都可以完成数据的提取,希望以上内容对你有所帮助吧。

    展开全文
  • 注意,这里只是定位,获得经纬度,城市代码等数据,并不在地图进行显示。 高德的定位开发文档: 点击打开链接 一、申请高德的KEY 有两点说明一下:  SHA1值和Package名: 获得SHA1的方法较多,网上也有很...

    同样的原因,在网上找了很多关于高德地图定位的资料,说的很乱,而且部分文章过去的年代过于久远了。最近用到定位的功能,就写下来分享下。注意,这里只是定位,获得经纬度,城市代码等数据,并不在地图进行显示。

    高德的定位开发文档:

    点击打开链接

    一、申请高德的KEY



    两点说明一下:  SHA1值和Package名:

    获得SHA1的方法较多,网上也有很多,但是我尝试了很多都不好使,下面介绍一个相对靠谱的:
    随便将你的工程编译出来,只要是个apk就行,把后缀改成rar,进入这个压缩包中的META-INF文件夹,将文件CERT.RSA放到随便一个磁盘的根目录。打开cmd,输入keytool -printcert -file CERT.RSA 



    包名:

    二、配置工程


    下载高德的jar, 点击打开链接  

    将下载的定位SDK的jar包复制到libs目录下,如果有老版本定位jar包在其中,请删除。我这里用的版本是AMap_Location_V2.8.0_20160811.jar

    在AndroidManifest.xml中配置key,就是第一步的key。


    <application
             android:icon="@drawable/icon"
             android:label="@string/app_name" >
             <meta-data
                android:name="com.amap.api.v2.apikey"
                android:value="请输入您的用户Key"/>
    </application>

    声明Service组件


    请在application标签中声明service组件,每个app拥有自己单独的定位service。

    如果这一步报错,就说明你的导入的jar有问题。


    <service android:name="com.amap.api.location.APSService"></service>

    声明权限

    <!--用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!--获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!--用于访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <!--用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


    三、代码实现


    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    import com.amap.api.location.AMapLocation;
    import com.amap.api.location.AMapLocationClient;
    import com.amap.api.location.AMapLocationClientOption;
    import com.amap.api.location.AMapLocationListener;
    
    public class MainActivity extends Activity {
        //声明AMapLocationClient类对象
        public AMapLocationClient mLocationClient = null;
        //声明AMapLocationClientOption对象
        public AMapLocationClientOption mLocationOption = null;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mLocationClient = new AMapLocationClient(getApplicationContext());
            mLocationClient.setLocationListener(mLocationListener);
    
            mLocationOption = new AMapLocationClientOption();
            //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置是否返回地址信息(默认返回地址信息)
            mLocationOption.setNeedAddress(true);
            //获取一次定位结果:
            //该方法默认为false。
            mLocationOption.setOnceLocation(true);
            //设置是否允许模拟位置,默认为false,不允许模拟位置
            mLocationOption.setMockEnable(false);
    
            //给定位客户端对象设置定位参数
            mLocationClient.setLocationOption(mLocationOption);
            //启动定位
            mLocationClient.startLocation();
        }
    
        //声明定位回调监听器
        public AMapLocationListener mLocationListener = new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation amapLocation) {
                if (amapLocation != null) {
                    if (amapLocation.getErrorCode() == 0) {
                        //定位成功回调信息,设置相关消息
                        amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                        amapLocation.getLatitude();//获取纬度
                        amapLocation.getLongitude();//获取经度
                        amapLocation.getAccuracy();//获取精度信息
                        amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                        amapLocation.getCountry();//国家信息
                        amapLocation.getProvince();//省信息
                        amapLocation.getCity();//城市信息
                        amapLocation.getDistrict();//城区信息
                        amapLocation.getStreet();//街道信息
                        amapLocation.getStreetNum();//街道门牌号信息
                        amapLocation.getCityCode();//城市编码
                        amapLocation.getAdCode();//地区编码
                        amapLocation.getAoiName();//获取当前定位点的AOI信息
                    } else {
                        //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                        Log.e("AmapError", "location Error, ErrCode:"
                                + amapLocation.getErrorCode() + ", errInfo:"
                                + amapLocation.getErrorInfo());
                    }
                }
            }
        };
    }

    超级简单就拿到了定位,按照步骤走分分钟的事情,网上其他的资料要么版本太老,要么抄来抄去。
    展开全文
  • tornado获得客户端设备信息和ip地址

    千次阅读 2016-01-13 12:38:06
    tornado如何获取客户端设备信息 其实torando中有已经提供好的接口可以获取所有HTTPServerRequest中的信息 先看一下HTTPServerRequest中可以获取的信息都有哪些 HTTPServerRequest( protocol='http', host='192.168....
  • ASP.NET使用Request获取来源网址URL参数 Request对象功能是从客户端得到数据,常用的三种取得数据的方法是:Request.Form、Request.QueryString,Request。其第三种是前两种的一个缩写,可以取代前两种情况。而前...
  • 微信小程序 转发完相应的卡片后,想要获得点击该卡片的相关信息。 解决方法 官方网站介绍 let testOptions; Page({ onLoad:function(options){ //……其他逻辑 wx.showShareMenu({ withShareTicket: true ...
  • JavaScript事件来源元素

    千次阅读 2012-07-20 16:23:12
    但是在不同的浏览器中我们需要使用不同的方法来获得这个来源元素。假设evt为事件对象:W3C标准中,使用evt.target,而IE为evt.srcElement。所以我们可以用如下代码来跨浏览器地获得事件的来源元素: function ...
  • 信息论:熵与互信息

    万次阅读 多人点赞 2016-11-25 21:18:43
    这篇文章主要讲:熵, 联合熵(joint entropy),条件熵(conditional entropy),相对熵(relative entropy,KL 距离),互信息(mutual information),交叉熵(cross entropy),困惑度(perplexity)。 ...
  • 统计学原理 数据的来源

    千次阅读 2020-04-29 08:08:15
    数据的间接来源 取自系统外部的二手数据 各类经济信息中心、信息咨询机构、专业调查机构等提供的数据 各类专业期刊、报纸、书籍所提供的资料 各种会议,如博览会、展销会、交易会及专业性、学术性研讨会上交流的...
  • Android获取GooglePlay下载来源

    千次阅读 2019-12-21 13:50:21
    用户通过推广链接下载App的时候,国内应用商店是无法获取推广来源的,通过而GooglePlay可以,通过网址构建工具生成前往GooglePlay的下载链接,应用就可以获取到推广来源信息,数据可以自由在构建工具设置。...
  • 微博数据集来源

    千次阅读 2017-06-17 12:14:01
    2、NLPIR微博内容语料库-23万条  1.NLPIR微博内容语料库由北京理工大学网络搜索挖掘与安全实验室张华平博士,通过公开采集与抽取从新浪微博、腾讯微博...为了推进微博计算的研究,现通过自然语言处理与信息
  • GooglePlay区分推荐来源

    千次阅读 2018-12-10 16:00:00
    注意:第一种集成方法可以直接测试获取引荐来源信息,默认获取的信息为:utm_source=google-play&utm_medium=organic  第二种集成方法可以通过以下两种方法进行测试。 1.打开android studio在terminal中直接...
  • 华为5G技术来源

    千次阅读 2019-06-10 08:46:29
    1981 年,阿勒坎在位于加州理工学院获得本科学位,随后他去了美国的另一所名校——麻省理工学院,于 1985 年得到电子信息工程专业的博士学位。值得一提的是,阿勒坎的博士生导师是美国人罗伯特·加拉格(Robert ...
  • 获取来源IP地址

    千次阅读 2012-12-15 23:23:42
    获得客户端真实IP地址的方法一: public String getRemortIP(HttpServletRequest request) { if (request.getHeader(”x-forwarded-for”) == null) { return request.getRemoteAddr(); } return request.getHe
  • SourceTracker—微生物来源分析

    千次阅读 2018-08-16 23:00:30
    前一阵我们翻译Rob Knight的综述,1.8万字,让你熟读2篇轻松握微生物组领域分析框架、把握未来分析趋势。目前在宏基因组平台累计过万人次,热心肠平台首发阅读7600...其中提到了一款追踪微生物来源的软件SourceTrack...
  • 软件漏洞的主要来源

    千次阅读 2015-01-31 01:14:22
    没有一款软件或平台敢说...下面介绍一下iOS中(当然也适用于其他平台)中几种常见的漏洞的来源。 一:缓冲区溢出(buffer overflows) 缓冲区溢出是软件安全漏洞的主要来源。所谓缓冲区溢出,指的就是代码写入
  • dataTables插件-四种数据来源

    千次阅读 2016-07-09 18:01:15
    四种数据来源: 对于jQuery dataTables 来说,支持四种表格数据来源。 最为基本的就是来源于网页,在 dataTables 中称为 DOM 来源。$(document).ready(function() { $('#example').dataTable(); } );第二种数据...
  • php获取页面来源 HTTP_REFERER

    千次阅读 2018-03-11 17:03:56
    通过 getenv("HTTP_REFERER") 可以得到页面来源然后通过页面来源判断用户是不是用非法途径通过http来提交的数据
  • 使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。推广用户在生成自己的推广二维码的时候,可以带上用户的身份标识(比如用户id),那么其他人在扫描这个带有UID参数的二维码...
  • Google Analytics的流量来源报告显示了访问网站的流量来自于哪里。Google对流量按照来源sources和媒介mediums进行了分类。用来源sources来表示流量的来源,用媒介mediums来表示流量的属性。报告中默认按来源分为:1...
  • 信息系统分析与设计课程心得

    万次阅读 2017-02-28 13:41:39
    信息系统分析与设计课程心得此博客为信息系统分析与设计课程的学习心得记录。一、绪论1概念1.1信息要了解信息系统,首先要了解信息的概念。信息是我们理解世界的重要概念,我对它的定义是:信息是对客观事物及其相互...
  • 一般来说,信息法由信息资源管理法、政府信息公开法、信息保密法、大众传播法、知识产权法、网络信息法等组成,涉及宪法、法律、行政法规、部门规章、地方行政和规章在内的所有关于信息活动和信息工作的法律法规。...
  • 分析Google Analytics中的流量来源

    千次阅读 2016-03-14 15:29:24
    最近在查看一个网站的数据时发现,该网站流量来源中直接流量部分占了40%。这说明有近一半的访次属于直接访问!对照Google Analytics对直接流量的定义,确认该网站近期没有进行过大规模的线下推广活动后,我们马上就...
  • 获取网页的访问来源及其应用

    千次阅读 2009-07-03 22:38:00
    在网易博客里看到有页面的访问来源,可以看到是从那个链接点进来的。其实获取网页的访问来源也不复杂,主要是获取http头的Referer变量。首先看一个asp例子: 建立文件a.asp: Dim from from = Request....
  • 利用用户信息,可以实现体验优化、用户来源统计、帐号绑定、用户身份鉴权等功能。OAuth2.0网页授权这个也是在做微信公众平台用到最多的,可以利用授权接口对自己平台内用户进行绑定,实现用户扫描码和微信分享、微信...
  • 通过一个星期的研究,终于把GooglePlay下载来源数据统计按小于Google Play8.3.73版本和大于等于Google Play8.3.73版本做了版本的区分并在代码上实现,通过这篇文章记录一下自己的实现过程和遇到的问题或许能帮助一些...
  • 深入理解Java类型信息(Class对象)与反射机制

    万次阅读 多人点赞 2017-05-01 23:19:19
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ...深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解
  • Java 获取系统信息和服务器信息

    万次阅读 2012-12-20 16:45:18
    Java 获取系统信息 可以获取一些基本的电脑信息和服务器信息,还有更多的信息没有写进下面的方法: import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Date; import java.util....
  • 1.需求和例子需求:获得变量的名称 实现例子:aaa = '23asa' bbb = 'kjljl2' loc = locals()def get_variable_name(variable): print loc for key in loc: if loc[key] == variable: return key print get_v

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 269,728
精华内容 107,891
关键字:

如何获得信息的来源