获取手机信息,位置信息

获取手机信息的Helper

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;

import androidx.core.app.ActivityCompat;

import com.ta.utdid2.android.utils.NetworkUtils;

public class PhoneHelper {
    //需要注意的是TelephonyManager除了在xml里面要加权限,同时还需要动态申请READ_PHONE_STATE权限,
    private static TelephonyManager telephonyManager;
    private Activity activity;

    public PhoneHelper(Activity activity) {
        this.activity = activity;
//        String str = Looper.myLooper() == Looper.getMainLooper() ? "主线程" : "非主线程";
    }

    public class PhoneBean {//自定义的对象,需要更多参数的话自己添加
        private String netWorkType = "没有网络";
        private String SystemType = "android";
        private String DeviceModel;//设备型号:nikel
        private String SystemVerson;//版本信息:6.0
        private String deviceName;//品牌:Xiaomi

        private String deviceId = "0000003982923892827";//设备标志:IMEI:2378283982923892827
        private String Operators;//运营商:中国移动

        public String getSystemType() {
            return SystemType;
        }

        public void setSystemType(String systemType) {
            SystemType = systemType;
        }


        public String getDeviceId() {
            return deviceId;
        }

        public void setDeviceId(String deviceId) {
            this.deviceId = deviceId;
        }

        public String getDeviceModel() {
            return DeviceModel;
        }

        public void setDeviceModel(String deviceModel) {
            DeviceModel = deviceModel;
        }

        public String getOperators() {
            return Operators;
        }

        public void setOperators(String operators) {
            Operators = operators;
        }

        public String getSystemVerson() {
            return SystemVerson;
        }

        public void setSystemVerson(String systemVerson) {
            SystemVerson = systemVerson;
        }

        public String getDeviceName() {
            return deviceName;
        }

        public void setDeviceName(String deviceName) {
            this.deviceName = deviceName;
        }

        public String getNetWorkType() {
            return netWorkType;
        }

        public void setNetWorkType(String netWorkType) {
            this.netWorkType = netWorkType;
        }
    }

    public PhoneBean getPhoneMsg() {
        PhoneBean phoneBean = new PhoneBean();
        phoneBean.setNetWorkType(NetworkUtils.isWifi(activity) ? "wifi" : "4g");
        phoneBean.setDeviceModel(Build.DEVICE);
        phoneBean.setDeviceName(Build.MODEL);
        phoneBean.setSystemVerson(Build.VERSION.RELEASE);
        phoneBean.setDeviceId(getAndroidId(activity));

//        因为谷歌对于用户权限越来越严格,直接不要telephonyManager了,用androidId来判断
//        if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
//            telephonyManager = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);
//            String Operators = "中国移动";
//            String DeviceId = "0000003982923892827";
//            if (telephonyManager != null) {
//                String IMSI = telephonyManager.getSubscriberId();
//                if (IMSI != null) {
//                    if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
//                        Operators = "中国移动";
//                    } else if (IMSI.startsWith("46001")) {
//                        Operators = "中国联通";
//                    } else if (IMSI.startsWith("46003")) {
//                        Operators = "中国电信";
//                    }
//                }
//                if (telephonyManager.getDeviceId() != null) {
//                    DeviceId = telephonyManager.getDeviceId();
//                }
//            }
//            phoneBean.setDeviceId(DeviceId);
//            phoneBean.setOperators(Operators);
//        } else {
//            // TODO: Consider calling 如果权限是拒绝的就随便填些数据,一定要拿到DeviceId的话请强制要求给权限
//            phoneBean.setDeviceId("0000003982923892827");
//            phoneBean.setOperators("中国移动");
//        }
        return phoneBean;
    }

    /**
     * 获取AndroidId
     */
    private String getAndroidId(Context context) {
        if (context == null) {
            return "";
        }
        String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        return (TextUtils.isEmpty(androidId) ? "0000003982923892827" : androidId);
    }
}

下面是获取位置的,像上面说的,动态申请权限需要先在AndroidManifest.xml声明,分别是ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.widget.Toast;

import androidx.core.app.ActivityCompat;

import com.yanzhenjie.permission.Action;
import com.yanzhenjie.permission.AndPermission;

import java.io.IOException;
import java.util.List;

import static android.content.Context.LOCATION_SERVICE;

/**
 * Created by admin on 2017/11/6.
 */
public class LocationHelper {
    private Activity activity;
    private LocationInterface locationInterface;

    public LocationHelper(Activity activity, LocationInterface locationInterface) {
        this.activity = activity;
        this.locationInterface = locationInterface;
        checkLocationPermission();
    }

    private String judgeProvider(LocationManager locationManager) {
        List<String> prodiverlist = locationManager.getProviders(true);
        if (prodiverlist.contains(LocationManager.NETWORK_PROVIDER)) {
            return LocationManager.NETWORK_PROVIDER;
        } else if (prodiverlist.contains(LocationManager.GPS_PROVIDER)) {
            return LocationManager.GPS_PROVIDER;
        } else {
//华为如果没打开gps找不到位置提供器
            Toast.makeText(activity, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();
        }
        return null;
    }

    private void getLocation(Context context) {//获取位置
        LocationManager locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);//获得位置服务
        try {
            if (locationManager != null) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return null;
            }
            if (locationManager != null) {
                List<String> providers = locationManager.getProviders(true);
                Location bestLocation = null;
                for (String providerStr : providers) {
                    Location l = locationManager.getLastKnownLocation(providerStr);
                    if (l == null) {
                        continue;
                    }
                    if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
                        // Found best last known location: %s", l);
                        bestLocation = l;
                    }
                }
                return bestLocation;
            }

                //String provider = judgeProvider(locationManager);//位置提供器
               // if (provider != null) {//有位置提供器的情况
                   // //为了压制getLastKnownLocation方法的警告
                  //  if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                          //  && ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                      //  return;
                  //  }

                   // //Location location = locationManager.getLastKnownLocation(provider);//这个可能会搜不到
                   // if (location != null) {
                      //  Geocoder geocoder = new Geocoder(activity);
                      //  try {
                        //    List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                         //   Address address = addresses.get(0);
                        //    if (locationInterface != null) {
                           //     locationInterface.location(address);
                        //    }
                     //   } catch (IOException e) {
                        //   e.printStackTrace();
                      //  }
                  //  }
                //}
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void checkLocationPermission() {
//        AndPermission是别人的框架,百度一下就有
//        虽然位置权限需要动态申请,但他并不是特别重要的功能,所以每次打开页面随意申请一下就行,也不需要管什么回调
        AndPermission.with(activity)
                .runtime()
                .permission(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)
                .onGranted(new Action<List<String>>() {
                    @Override
                    public void onAction(List<String> data) {
                        //允许了就去获取位置
                        getLocation(activity);
                    }
                })
                .start();
    }

    public interface LocationInterface {
        void location(Address address);
    }
}

使用方法

new LocationHelper(this, new LocationHelper.LocationInterface() {
            @Override
            public void location(Address address) {
                LogUtil.i(address.toString() + "");
            }
        });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容