zoukankan      html  css  js  c++  java
  • android判断程序是否前台显示---及判断屏幕是否是亮的----附赠BAIDU定位的工具类实现代码

    本帖最后由 cj6585256 于 2013-6-20 13:31 编辑

    protected static boolean isTopActivity(Activity activity){

            String packageName = "xxxxx";

            ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);

            List<RunningTaskInfo>  tasksInfo = activityManager.getRunningTasks(1);  

            if(tasksInfo.size() > 0){  

                System.out.println("---------------包名-----------"+tasksInfo.get(0).topActivity.getPackageName());

                //应用程序位于堆栈的顶层  

                if(packageName.equals(tasksInfo.get(0).topActivity.getPackageName())){  

                    return true;  

                }  

            }  

            return false;

        }
    记得添加权限:permission.GET_TASKS

    PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
    pm.isScreenOn()

    package com.chexiaodi.location;
    
    import java.util.List;
    
    import android.app.Activity;
    import android.app.ActivityManager;
    import android.app.ActivityManager.RunningTaskInfo;
    import android.content.Context;
    import android.location.Criteria;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.os.PowerManager;
    import android.util.Log;
    import android.widget.Toast;
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.chexiaodi.android.cxd.Constands;
    import com.chexiaodi.android.cxd.MyApplication;
    
    public class LocationHelper implements LocationListener, BDLocationListener {
        private static final long MINTIME = 3000;
        private static final float MINDISTANCE = 0.0f;
        private static final boolean DEBUG_TOAST = true;
    
        private Context mContext;
        private LocationManager mLocationManager;
        private Location savedLocation;
        private BDLocation savedBaiduLocation;
        private LocationClient mBDLocationClient;
        private static LocationHelper mInstance = null;
    
        private static LocationClientOption option;
        
        private static String packageName;
    
        private LocationHelper(Context c) {
            this.mContext = c;
            option = new LocationClientOption();
            option.setOpenGps(true);
            option.setAddrType("all");// 返回的定位结果包含地址信息
            option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
            option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
            option.disableCache(true);// 禁止启用缓存定位
            option.setPoiNumber(5); // 最多返回POI个数
            option.setProdName("CheXiaoDi");
            option.setPoiDistance(1000); // poi查询距离
            option.setPoiExtraInfo(true); // 是否需要POI的电话和地址等详细信息
            mBDLocationClient = new LocationClient(mContext);
            mBDLocationClient.setLocOption(option);
            mBDLocationClient.registerLocationListener(this);
        }
    
        public synchronized static LocationHelper fromContext(Context c) {
            if (mInstance == null)
                mInstance = new LocationHelper(c);
            return mInstance;
        }
    
        /**
         * get the current location of device
         * 
         * @return
         */
        public Location getCurrentLocation() {
            if (savedLocation == null) {
                Criteria c = new Criteria();
                c.setAccuracy(Criteria.ACCURACY_FINE);
                c.setAltitudeRequired(false);
                c.setBearingRequired(false);
                c.setCostAllowed(false);
                String provider = mLocationManager.getBestProvider(c, true);
                savedLocation = mLocationManager.getLastKnownLocation(provider);
                packageName = Constands.Package_NAME;
            }
            return savedLocation;
        }
    
        /**
         * check whether GPS is provided by device
         * 
         * @return
         */
    
        public boolean isGPSProvided() {
            if (mLocationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
                return true;
            }
            return false;
        }
    
        /**
         * check whether GPS is currently enabled.
         * 
         * @return
         */
        public boolean isGPSEnabled() {
            return this.isGPSProvided();
        }
    
        @Override
        public void onLocationChanged(Location location) {
            this.savedLocation = location;
            android.util.Log.i("GPS", "onLocationChanged : " + location);
            if (DEBUG_TOAST)
                Toast.makeText(mContext, "Location =" + location.toString(), Toast.LENGTH_LONG).show();
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            android.util.Log.i("GPS", "onStatusChanged : " + provider);
        }
    
        @Override
        public void onProviderEnabled(String provider) {
            android.util.Log.i("GPS", "onProviderEnabled : " + provider);
        }
    
        @Override
        public void onProviderDisabled(String provider) {
            android.util.Log.i("GPS", "onProviderDisabled : " + provider);
        }
    
        /***************************************************************/
        /************************** 百度地图位置信息回调 ************************/
        /***************************************************************/
        @Override
        public void onReceiveLocation(BDLocation location) {
            if (location == null)
                return;
            StringBuffer sb = new StringBuffer(256);
            sb.append("time : ");
            sb.append(location.getTime());
            sb.append("
    error code : ");
            sb.append(location.getLocType());
            sb.append("
    latitude : ");
            sb.append(location.getLatitude());
            sb.append("
    lontitude : ");
            sb.append(location.getLongitude());
            sb.append("
    radius : ");
            sb.append(location.getRadius());
            if (location.getLocType() == BDLocation.TypeGpsLocation) {
                sb.append("
    speed : ");
                sb.append(location.getSpeed());
                sb.append("
    satellite : ");
                sb.append(location.getSatelliteNumber());
            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
                sb.append("
    addr : ");
                sb.append(location.getAddrStr());
            }
            savedBaiduLocation = location;
            // stopBaiduLocation(); //一次定位之后关闭定位动能
        }
    
        @Override
        public void onReceivePoi(BDLocation arg0) {
        }
    
        private void logMsg(String log) {
            android.util.Log.d("GPS", log);
        }
    
        public void startBaiduLocation() {
            Log.i("0726inHELPER", "STARTBAIDU");
    
            if (!mBDLocationClient.isStarted()) {
                mBDLocationClient.start(); // 如果还没开启定位则开启
            }
    
            if (mBDLocationClient != null && mBDLocationClient.isStarted()) {
                mBDLocationClient.requestLocation();
            } else {
            }
        }
    
        public void stopBaiduLocation(    ) {
            Log.i("07240726inHELPER","stopbaidu, appNotOnTop=="+String.valueOf(isScreenOff()));
            //综合判断,如果判断出认为程序在使用则不停baiduLoc
            if(mBDLocationClient.isStarted()&&(appNotOnTop()||isScreenOff())) {
                Log.d("07260724inHELPER","stopbaidu, appNotOnTop=="+String.valueOf(appNotOnTop()));
                mBDLocationClient.unRegisterLocationListener(this);
                
                mBDLocationClient.stop();
            }
        }
    
        public BDLocation getLocationFromBaiduLoc() {
            return savedBaiduLocation;
        }
        public boolean isScreenOff(){
            PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
            
            return !(pm.isScreenOn());
        }
    
        public boolean appNotOnTop(){
            ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
            List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(100);
            
            if(runningTaskInfos.size() > 0){  
    
                System.out.println("---------------包名-----------"+runningTaskInfos.get(0).topActivity.getPackageName());
    
                //应用程序位于堆栈的顶层  
    
                if("com.chexiaodi.android.cxd".equals(runningTaskInfos.get(0).topActivity.getPackageName())){  
    
                    return false;  
    
                }  
    
            }  
    
            return true;
        }
    }
  • 相关阅读:
    Linux Enterprise Cluster NOtes Ch4 同步:ssh和rsync
    e805上不安装中文外挂支持中文,很简单而且实用
    ARM的一些概念性问题
    C#调用WORD处理的小项目 转
    ASP.NET面试题
    .net清除cookie代码|.net为什么不能清除cookie|.net cookie 过期代码
    c#字符串转数字的函数|c#字符串转数字的无错函数|c#字符串转数字的最好函数
    Wiki简介
    new 和override 重写区别
    禁用IE的后退按钮|显示网页已过期|几种语言的实现方法|c#|javascript|html
  • 原文地址:https://www.cnblogs.com/linxiaojiang/p/3210619.html
Copyright © 2011-2022 走看看