Android开发笔记

Android开发笔记--在这个不安的世界安心快乐的生活着


1、 <!--获取手机短信-->
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    //读取短信授权
        if(ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.this,mPermissions,PERMISSION_REQUEST_CODE);
        }else{
            SMSUtils.getSms(MainActivity.this);
        }

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case PERMISSION_REQUEST_CODE:
                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    SMSUtils.getSms(MainActivity.this);
                }else{
                    Toast.makeText(MainActivity.this,"读取短信权限被拒绝",Toast.LENGTH_LONG).show();
                }
                break;
        }
    }
public class SMSUtils {
//    private static Uri SMS_DATA = Uri.parse("content://sms/sent"); //发件箱
    private static Uri SMS_DATA = Uri.parse("content://sms/");  //所有短信
//    private static Uri SMS_DATA = Uri.parse("content://sms/inbox"); //收件箱
    public static void getSms(Context context){
        ContentResolver contentResolver = context.getContentResolver();
        String[] projection = new String[]{Telephony.Sms._ID,Telephony.Sms.ADDRESS,Telephony.Sms.PERSON,
        Telephony.Sms.BODY,Telephony.Sms.DATE,Telephony.Sms.TYPE};
        Cursor cursor = contentResolver.query(SMS_DATA,projection,null,null,"date desc");
        if(cursor != null){
            while (cursor.moveToNext()) {
                String phone = cursor.getString(cursor.getColumnIndex(Telephony.Sms.ADDRESS)); //手机号
                String name = cursor.getString(cursor.getColumnIndex(Telephony.Sms.PERSON));  //联系人名字
                String content = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY)); //短信内容
                String time = cursor.getString(cursor.getColumnIndex(Telephony.Sms.DATE)); //时间
                String type = cursor.getString(cursor.getColumnIndex(Telephony.Sms.TYPE)); //短信类型,1为接收,2为发送
                Log.i("wanlijun", "phone=" + phone);
                Log.i("wanlijun", "name=" + name);
                Log.i("wanlijun", "content=" + content);
                Log.i("wanlijun", "time=" + time);
                Log.i("wanlijun", "type=" + type);
            }
        }
    }
}


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

/**
 * @author wanlijun
 * @description  百度地图定位方法封装
 * @time 2018/1/12 9:13
 */


public class LocationServiceUtils {
    private LocationClient mLocationClient = null;
    private MyLocationListener mMyLocationListener;
    private Context mContext;
    public LocationServiceUtils(Context context){
        this.mContext = context;
    }
    public void getCurrentLocation(){
        if(mLocationClient == null){
            mLocationClient = new LocationClient(mContext);
        }
        initLocation();
        if(mMyLocationListener == null){
            mMyLocationListener = new MyLocationListener();
        }
        mLocationClient.registerLocationListener(mMyLocationListener);
        mLocationClient.start();
    }
    private void initLocation(){
        LocationClientOption options = new LocationClientOption();
        options.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); //可选,设置定位模式,默认高精度 选项:高精度,低功耗,仅设备定位
        options.setCoorType("bd09ll"); //可选,设置返回经纬度坐标类型,默认gcj02 选项:gcj02:国测局坐标 bd09ll:百度经纬度坐标 bd09:百度墨卡托坐标 海外地区定位,无需设置坐标类型,统一返回wgs84类型坐标
        options.setScanSpan(0); //可选,设置发起定位请求的间隔,int类型,单位ms,如果设置为0,则代表单次定位,即仅定位一次,默认为0,如果设置非0,需设置1000ms以上才有效
        options.setOpenGps(true); //可选,设置是否使用gps,默认false ,使用高精度和仅用设备两种定位模式的,参数必须设置为true
        options.setLocationNotify(false); //可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false
        options.setIgnoreKillProcess(true); //可选,定位SDK内部是一个service,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认(建议)不杀死
        options.SetIgnoreCacheException(false); //可选,设置是否收集Crash信息,默认收集,即参数为false
        options.setWifiCacheTimeOut(5*60*1000); //如果设置了该接口,首次启动定位时,会先判断当前WiFi是否超出有效期,若超出有效期,会先重新扫描WiFi,然后定位
        options.setEnableSimulateGps(false); //可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false
        options.setIsNeedAddress(true);  //可选,是否需要地址信息,默认为不需要,即参数为false
        options.setIsNeedLocationDescribe(true); //可选,是否需要位置描述信息,默认为不需要,即参数为false,结果类似于“在北京天安门附近”
        options.setIsNeedLocationPoiList(true); //可选,是否需要周边POI信息,默认为不需要,即参数为false
        mLocationClient.setLocOption(options);


    }
    public class MyLocationListener extends BDAbstractLocationListener{
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            double latitude = bdLocation.getLatitude(); //获取纬度信息
            double longitude = bdLocation.getLongitude();//获取经度信息
            String addr = bdLocation.getAddrStr();    //获取详细地址信息
            String country = bdLocation.getCountry();    //获取国家
            String province = bdLocation.getProvince();    //获取省份
            String city = bdLocation.getCity();    //获取城市
            String district = bdLocation.getDistrict();    //获取区县
            String street = bdLocation.getStreet();    //获取街道信息
            String locationDescribe = bdLocation.getLocationDescribe();   //获取位置描述信息
            Log.i("wanlijun","latitude="+latitude);
            Log.i("wanlijun","longitude="+longitude);
            Log.i("wanlijun","addr="+addr);
            Log.i("wanlijun","country="+country);
            Log.i("wanlijun","province="+province);
            Log.i("wanlijun","city="+city);
            Log.i("wanlijun","district="+district);
            Log.i("wanlijun","street="+street);
            Log.i("wanlijun","locationDescribe="+locationDescribe);
            List<Poi> poiList = bdLocation.getPoiList();   //获取周边POI信息
            for (int i=0;i<poiList.size();i++){
                Poi poi = poiList.get(i);
                Log.i("wanlijun","poiName="+poi.getName());
            }
        }
    }


}


3、/**
 * @author wanlijun
 * @description  获取手机上安装的应用信息
 * @time 2018/1/12 10:32
 */


public class ApkUtils {
    public static final int FILTER_ALL_APP = 1; //所有应用
    public static final int FILTER_SYSTEM_APP = 2; //系统应用
    public static final int FILTER_THIRD_APP = 3; //第三方应用
    public static final int FILTER_SDCARD_APP = 4; //安装在SDcard中的应用
    public static ArrayList<String> getApkInfo(Context context, int filter){
        ArrayList<String> appNames = new ArrayList<>();
        PackageManager pm = context.getPackageManager();
        List<PackageInfo> packageInfoList = pm.getInstalledPackages(0);
        switch (filter){
            case FILTER_ALL_APP:
                for(int i=0;i<packageInfoList.size();i++){
                    PackageInfo packageInfo = packageInfoList.get(i);
                    String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
                    if(TextUtils.isEmpty(appName)){
                        appName = packageInfo.packageName;
                    }
                    appNames.add(appName);
                    Log.i("wanlijun",appName);
                }
                break;
            case FILTER_SYSTEM_APP:
                for(int i=0;i<packageInfoList.size();i++){
                    PackageInfo packageInfo = packageInfoList.get(i);
                    String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
                    if(TextUtils.isEmpty(appName)){
                        appName = packageInfo.packageName;
                    }
                    if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM )!= 0){
                        appNames.add(appName);
                        Log.i("wanlijun",appName);
                    }
                }
                break;
            case FILTER_THIRD_APP:
                for(int i=0;i<packageInfoList.size();i++){
                    PackageInfo packageInfo = packageInfoList.get(i);
                    String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
                    if(TextUtils.isEmpty(appName)){
                        appName = packageInfo.packageName;
                    }
                    if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM )<= 0){
                        appNames.add(appName);
                        Log.i("wanlijun",appName);
                    }else if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0){
                        //本来是系统程序,被用户手动更新后,该系统程序也成为第三方应用程序了
                        appNames.add(appName);
                        Log.i("wanlijun",appName);
                    }
                }
                break;
            case FILTER_SDCARD_APP:
                for(int i=0;i<packageInfoList.size();i++){
                    PackageInfo packageInfo = packageInfoList.get(i);
                    String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
                    if(TextUtils.isEmpty(appName)){
                        appName = packageInfo.packageName;
                    }
                    if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE )!= 0){
                        appNames.add(appName);
                        Log.i("wanlijun",appName);
                    }
                }
                break;
        }
        return appNames;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值