62库

您现在的位置是:首页 > 前端开发 > Html/Css > 正文

Html/Css

android获取地址,Android获取IP地址

Admin2023-11-11Html/Css48

android怎么获取ip地址

一、首先介绍苹果系统下查询手机ip:

1、首先点击【设置】按钮

2、开启无线局域网

3、然后选择无线网络并连接,连接成功后,点击所连接网络后面的惊叹号图标

4、然后就能看到该无线网络的详细信息了,其中就包含了ip地址

二、介绍安卓系统下查询手机ip地址,其方法和苹果系统差不多:

打开系统设置,点击进入

点击wlan

然后进入高级设置

最后就能查看手机的mac地址和ip地址了

android 获取局域网IP与MAC 地址 毫秒级(详解)

如果不想了解,请直接伸手 : android 获取局域网IP与MAC 地址(精简)

开始理清思路:主要使用 linux 两个命令(2017-07-21 fix:这个思路不好,后面使用udp取代【毫秒级】)

【ping】: 查询某个ip是否被设备占用

【cat】  :文本输出命令(其实可以使用 【arp】,但手机需要root权限)

【ping】:这个我就不说了,实在不知道的,这次度娘不会骗你的。主要讲讲 【arp】:这里只简单的介绍,推荐一篇博文: Android 平台上的 ARP 和 ARP欺骗 。我们的【cat】命令主要为了输出手机本地ARP缓存表, ARP命令 可用于查询本机ARP缓存中IP地址和 MAC地址 的对应关系

可以看到我们电脑中缓存的 ip地址与对应的mac地址,但我们手机上又要怎么获得呢?

哈哈其实到这里基本就结束了,也不算什么详解,目前这个方法还有个缺陷就是,耗时比较长,我计算了一下大概得花10秒才能得到局域网内的所有存在的ip与对应的mac。

还有待改善,其实想先取arp缓存,然后把arp中没有的ip地址通过ping测试,然后再取arp缓存,这样可以减少一部分的ping测试线程,但为了保证arp中ip对应的mac永远是新的,只能每次都循环ping测试所有网段内的ip。如果有更好的想法,希望来怼我。

改变思路:使用udp来替代原先多线程ping

具体怎么玩我就不写了,他人的思路,抄袭过来,有损我英俊的形象,写的还是比较好的。

Android 单线程也能极速刷新并获取局域网设备(IP+MAC)信息, 从4分30S 优化到 0.150S 不是梦

如果觉得他的用起来麻烦,我的IpScanner类也更新了,可以直接copy使用,还是简单的。 

奉上项目地址: IpSanner (一个类一个回调就搞定了,简单的)

安卓端获取地理位置

package org.cocos2dx.javascript.LocaltionPos;

import android.content.pm.PackageManager;

import android.location.Address;

import android.location.Geocoder;

import android.location.Location;

import android.location.LocationManager;

import android.support.v4.app.ActivityCompat;

import org.cocos2dx.javascript.AppActivity;

import org.cocos2dx.lib.Cocos2dxActivity;

import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;

import java.io.IOException;

import java.util.List;

public class LocaltionPos {

    public static String getLocation(AppActivity activity) {

        if (ActivityCompat.checkSelfPermission(Cocos2dxActivity.getContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED

                 ActivityCompat.checkSelfPermission(Cocos2dxActivity.getContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)

        {

            return "{err:'未开启定位'}";

        }

        LocationManager mLocationManager = (LocationManager) Cocos2dxActivity.getContext().getSystemService(Cocos2dxActivity.getContext().LOCATION_SERVICE);

        ListString providers = mLocationManager.getProviders(true);

        Location bestLocation = null;

        for (String provider : providers) {

            Location l = mLocationManager.getLastKnownLocation(provider);

            if (l == null) {

                continue;

            }

            if (bestLocation == null || l.getAccuracy()  bestLocation.getAccuracy()) {

                // Found best last known location: %s", l);

                bestLocation = l;

            }

        }

        if (bestLocation != null) {

            String coordinate;

            String addressStr = "";

            String sheng = "";        //省

            String shi = "";        //市

            String qu = "";        //区

            String lu = "";        //路

            final double longitude = bestLocation.getLongitude(); //经度

            final double latitude = bestLocation.getLatitude();  //维度

            Geocoder geocoder = new Geocoder(Cocos2dxActivity.getContext());

            try {

                ListAddress addresses = geocoder.getFromLocation(latitude, longitude,1);

                StringBuilder sb = new StringBuilder();

                if (addresses.size()  0) {

                    Address address = addresses.get(0);

                    int maxLine = address.getMaxAddressLineIndex();

                    if (maxLine = 2) {

                        addressStr = address.getAddressLine(0) + " " + address.getAddressLine(1);

                    } else {

                        addressStr = address.getAddressLine(0);

                    }

                    sheng = address.getAdminArea();

                    shi = address.getLocality();

                    qu = address.getSubLocality();

                    lu = address.getThoroughfare();

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

            final String pos = addressStr;//详细位置:**省**市**区**街道**小区**号

            final String province = sheng;//省

            final String city = shi;    //市

            final String district = qu; //区

            final String road = lu;     //路

            activity.runOnGLThread(new Runnable() {

                @Override

                public void run() {

                    String tocode = "cc.game.emit(\"LocaltionPos\", "+latitude+","+longitude+","+ pos + ","+province+ ","+city+ ","+district+ ","+road+ ");";

                    Cocos2dxJavascriptJavaBridge.evalString(tocode);

                }

            });

            return "";

        } else {

            return "{err:'位置不可知'}";

        }

    }

    /**

     * 通过经纬度得到地理位置

     */

    public static void getLocalPositionByAddress( AppActivity activity ,double lng,double lat)

    {

        String coordinate;

        String addressStr = "";

        String sheng = "";        //省

        String shi = "";        //市

        String qu = "";        //区

        String lu = "";        //路

        Geocoder geocoder = new Geocoder(Cocos2dxActivity.getContext());

        try {

            ListAddress addresses = geocoder.getFromLocation(lat, lng,1);

            StringBuilder sb = new StringBuilder();

            if (addresses.size()  0) {

                Address address = addresses.get(0);

                int maxLine = address.getMaxAddressLineIndex();

                if (maxLine = 2) {

                    addressStr = address.getAddressLine(0) + " " + address.getAddressLine(1);

                } else {

                    addressStr = address.getAddressLine(0);

                }

                sheng = address.getAdminArea();

                shi = address.getLocality();

                qu = address.getSubLocality();

                lu = address.getThoroughfare();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        final String pos = addressStr;//详细位置:**省**市**区**街道**小区**号

        final String province = sheng;//省

        final String city = shi;    //市

        final String district = qu; //区

        final String road = lu;     //路

        final double longitude = lng;

        final double latitude = lat;

        activity.runOnGLThread(new Runnable() {

            @Override

            public void run() {

                String tocode = "cc.game.emit(\"LocaltionPosByAddress\", "+latitude+","+longitude+","+ pos + ","+province+ ","+city+ ","+district+ ","+road+ ");";

                Cocos2dxJavascriptJavaBridge.evalString(tocode);

            }

        });

    }

}

android如何获取地理位置

三种方式进行定位,获取用户位置,分别是基于基站定位, 网络定位,GPS定位。

1.基站定位(passive):这是基于网络基站进行定位的,定位的精确度在几十米到几千米不等,在城市中基站覆盖率比较高,推荐使用基站定位,如果是在郊区,基站相距较远,基站的覆盖没有城里好,定位的误差比较大。如果在郊区不推荐使用基站定位。

2.网络定位:wifi定位,网络定位

3.GPS定位:与卫星进行通信。手机中嵌入了GPS模块(精简版的A-GPS),通过A-GPS搜索卫星, 获取经纬度。使用GPS的弊端是:必须站在空旷的地方,头顶对着天空,如果云层厚了,也会受到一定的影响。精确度:10-50米

扩展知识:

使用Android是定位必备的权限:

uses-permission android:name= " android.permission.ACCESS_FINE_LOCATION " / //精确定位

uses-permission android:name= "android.permission.ACCESS_MOCK_LOCATION" / //模拟器

uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION" / //粗糙定位

//获取定位管理对象

LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);

String[] names=lm.getAllProviders();//获取所有的位置提供者,一般三种

Criteria criteria=new Criteria();//查询条件,如果设置了海拔,则定位方式只能是GPS;

criteria.setCostAllowed(true);//是否产生开销,比如流量费

String provider=lm.getBaseProvider(criteria,true)//获取最好的位置提供者,第二个参数为true,表示只获取那些被打开的位置提供者

lm.requestLocationUpdates(provier,0,0,new LocationListener(){});//获取位置。第二个参数表示每隔多少时间返回一次数据,第三个参数表示被定位的物体移动每次多少米返回一次数据。

private class MyLocationListener implements LocationListener {

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override

public void onProviderEnabled(String provider) {

}

@Override

@Override

public void onLocationChanged(Location location) {

System. out.println( "服务中位置监听发送了变化了" );

float accuracy = location.getAccuracy(); // 精确度

double altitude = location.getAltitude(); // 海拔

double latitude = location.getLatitude(); // 纬度

double longitude = location.getLongitude(); // 经度

String locationInfo = "jingdu:" + longitude + ",weidu:" + latitude + ",haiba:" + altitude + ",jingquedu:" + accuracy;

Editor edit = sp.edit();

edit.putString( "location", locationInfo);

edit.commit();

}

} public void onProviderDisabled(String provider) {

}

android 如何获取本机ip地址最佳方法

/**

* 获取ip地址

* @return

*/

public static String getHostIP() {

String hostIp = null;

try {

Enumeration nis = NetworkInterface.getNetworkInterfaces();

InetAddress ia = null;

while (nis.hasMoreElements()) {

NetworkInterface ni = (NetworkInterface) nis.nextElement();

EnumerationInetAddress ias = ni.getInetAddresses();

while (ias.hasMoreElements()) {

ia = ias.nextElement();

if (ia instanceof Inet6Address) {

continue;// skip ipv6

}

String ip = ia.getHostAddress();

if (!"127.0.0.1".equals(ip)) {

hostIp = ia.getHostAddress();

break;

}

}

}

} catch (SocketException e) {

Log.i("yao", "SocketException");

e.printStackTrace();

}

return hostIp;

}

android 获取蓝牙Mac地址

android 从6.0开始,通过BluetoothAdapter.getDefaultAdapter().getAddress()获取的地址是一个固定值02:00:00:00:00:00。6.0已经对蓝牙Wi-Fi的MAC地址做了隐藏。

以下方法能正确的获取android自带蓝牙的Mac地址:

1.添加net.vidageek:mirror:1.6.1

2.实现过程

本人也尝试过其他方法获取,比如从cat /sys/class/net/wlan0/address 或者/sys/class/net/eth0/address路径获取,该方式有些手机能获取得到,有的不能或缺,获取到的Mac 地址还不一定准确。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~