当前位置:  编程技术>移动开发
本页文章导读:
    ▪怎么将百度mapAPI获取经纬度写成公有方法        如何将百度地图API获取经纬度写成公有方法?原问题来自于CSDN问答社区:http://ask.csdn.net/questions/636   问题描述: 我使用的是百度地图API来获取经纬度坐标。但是我的程序里面有多个地方用.........
    ▪ jquerymobile-8 List容易使用        jquerymobile-8 List简单使用在开发的过程中我们会用到list显示一个列表,或者其他的东西。在普通的html中我们可以使用如下代码: <ul> <li>Raymond Camden</li> <li>Scott Stroz</li>.........
    ▪ 心得来自学习之应用网络处理       经验来自学习之应用网络处理           开发移动软件处理网络连接对于程序员是一个头疼的问题,至少我这个菜鸟这么认为,翻了几个软件发现有几个软件在logo页面就是检测网络是否.........

[1]怎么将百度mapAPI获取经纬度写成公有方法
    来源: 互联网  发布时间: 2014-02-18
如何将百度地图API获取经纬度写成公有方法?

原问题来自于CSDN问答社区:http://ask.csdn.net/questions/636

 

问题描述:

我使用的是百度地图API来获取经纬度坐标。但是我的程序里面有多个地方用到了经纬度。
所以我就想把这个获取经纬度的方法写成公共方法,但是遇到了问题。首先是我修改了一点的百度获取经纬度坐标的代码!

MyLocition.activity

 package Dagaishang.Android;

import java.util.HashMap;
import java.util.Map;

import Dagaishang.Android.Utility.CmpDistance;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;

import android.location.Location;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.LocationListener;

public class MyLocation extends Activity {
    // 自己的经纬度坐标
    private Double myPointX, myPointY;
    // 计算的两个经纬度之间的距离
    private Double Distance;
    LocationListener mLocationListener = null;// create时注册此listener,Destroy时需要Remove
    Map<String, Object> myMap = new HashMap<String, Object>();
    CmpDistance comDis = new CmpDistance();
    String FriendPx;
    String FriendPy;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylocation);
//      getLocationByBaidu("0", "0",this);
    }

    // FriendPx,FriendPy为好友的经纬度坐标,返回值为计算后的两个坐标的点的距离
    String getLocationByBaidu(String PointY, String PonitY,Activity tontext) {
        FriendPx = PointY;
        FriendPy = PonitY;
        BMapApiDemoApp app = (BMapApiDemoApp)tontext.getApplication();
        if (app.mBMapMan == null) {
            app.mBMapMan = new BMapManager(this.getApplication());
            app.mBMapMan.init(app.mStrKey,
                    new BMapApiDemoApp.MyGeneralListener());
        }
        app.mBMapMan.start();
        // 注册定位事件
        mLocationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                if (location != null) {
                    myPointX = location.getLongitude();
                    myPointY = location.getLatitude();
                    Distance = comDis.GetLongDistance(myPointX, myPointY,
                            Double.valueOf(FriendPx), Double.valueOf(FriendPy));
                }
            }
        };
        return String.valueOf(Distance);
    }

    @Override
    protected void onPause() {
        BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();
        // 移除listener
        app.mBMapMan.getLocationManager().removeUpdates(mLocationListener);
        app.mBMapMan.stop();
        super.onPause();
    }

    @Override
    protected void onResume() {
        BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();
        // 注册Listener
        app.mBMapMan.getLocationManager().requestLocationUpdates(
                mLocationListener);
        app.mBMapMan.start();
        super.onResume();
    }
}

其中的getLocationByBaidu()就是我想要使用到的获取经纬度并计算两个点之间距离的方法了,但是其中 if (app.mBMapMan == null) 在其他地方调用的时候会报空指针错误。不知道是不是因为传递过来的Activity不对或者说这里的getlocation()没有获取到东西。

问题
1.是否是因为这个activity没有显示,所以 BMapApiDemoApp app = (BMapApiDemoApp)tontext.getApplication();没有能获取到东西。怎么解决这个问题呢?
2.是否有其他办法来解决获取经纬度坐标的问题,实在不行 我就只有在每个需要 用到经纬度的地方把上面的那个方法写到那个activity里面了(我试过那样可以),但是代码太冗余了,重复的很多。

 

我也没见你调用这个方法啊?是否为空,一个log就明白了
你不是有这么一句吗
if (location != null) {
就在这里调用,直接把这个location传过去不就行了吗,是不会空的
你所说的空,肯定是传的时候就是空的,可以调试看看

对于这个径纬度,要是我,我会分开,取得径纬度不做好,我不会进行下一步
你现只需将此两个变量值当成参数或是用结构体还是啥数据类型都一回事

Class VecLoc{
double latitude =0;//经度
double longitude =0;//纬度
float accuracy =0;//精度
double altitude =0;//海拔
float bearing =0;//方向
float speed =0;//速度
}

关健是能把数据送过去,此处在不在activity里不重要,因为context可以传送

另外还有一种方法,如果操作过多,你可以建立一个Handler消息通道
在任何地方都可以通过这样来与之通信,特别你有多个类会很实用

Bundle data = new Bundle();
    String mTAG = "LocationMessage";
    String str="{\"latitude\":123,\"longtitude\":321}";
        data.putString(mTAG,str);
        Message msg = new Message();
        msg.setData(data);
        mHandler.sendMessage(msg);



 


    
[2] jquerymobile-8 List容易使用
    来源: 互联网  发布时间: 2014-02-18
jquerymobile-8 List简单使用

在开发的过程中我们会用到list显示一个列表,或者其他的东西。在普通的html中我们可以使用如下代码:

<ul>
	<li>Raymond Camden</li>
	<li>Scott Stroz</li>
	<li>Todd Sharp</li>
	<li>Dave Ferguson</li>
</ul>

这样能创建一个默认的列表,然后我们使用CSS修改为自己想要的样式。在jquerymobile中我们达到同样的样式只需要为其添加data-role="content"。修改后如下:

<ul data-role="listview">
	<li>Raymond Camden</li>
	<li>Scott Stroz</li>
	<li>Todd Sharp</li>
	<li>Dave Ferguson</li>
</ul>

代码中其他部分都省略了,这样的显示效果如下:

在实际的情况中我们经常使用多级的列表。我们只需要在上面每个li中添加ul,这样jquerymobile会自动为那些有子项目的添加一个箭头。部分代码:

<ul data-role="listview">
	<li>Games
	<ul>
		<li>Pong</li>
		<li>Breakout</li>
		<li>Tron</li>
	</ul>
	</li>
	<li>Planets</li>
</ul>

效果如下:


没有子项目的将不会为其添加上箭头,点击进入后,子项目显示跟第一个图片的效果一样。


    
[3] 心得来自学习之应用网络处理
    来源: 互联网  发布时间: 2014-02-18
经验来自学习之应用网络处理

           开发移动软件处理网络连接对于程序员是一个头疼的问题,至少我这个菜鸟这么认为,翻了几个软件发现有几个软件在logo页面就是检测网络是否可用,在其他页面有一个broadcast去处理,写了一下子,贴点代码做个笔记

@Override
 protected void onResume() {
  // TODO Auto-generated method stub
  super.onResume();
  if (checknetwork()) {
       //跳转到其他页面的代码

      .......................

     }else {
   openNet("网络信息", "无法连接上服务器,请检查网络");
  }
  
 }
 
 
 
 private void openNet(String title, String message) {
  // 让用户检查网络
  AlertDialog.Builder adb = new AlertDialog.Builder(
    LogoActivity.this);
  final AlertDialog ad = adb.create();
  // String current = "当前无法获取定位信息";
  ad.setTitle(title);
  ad.setMessage(message);
  ad.setButton("确定", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    //由于4.0以上把原来的设置方式舍弃了所以上面的代码舍去
    if(android.os.Build.VERSION.SDK_INT > 13 ){ 
     //3.2以上打开设置界面,也可以直接用ACTION_WIRELESS_SETTINGS打开到wifi界面 
     startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));}
    else {   
     startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
    }
    
    ad.dismiss();
    
    

   }
  });
  ad.setButton2("取消", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    ad.dismiss();
    System.exit(0);
   }
  });
  ad.show();
 }
 
 
 
public boolean checknetwork() {
  ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    if( cm == null )
     return false;
    NetworkInfo netinfo = cm.getActiveNetworkInfo();
    if (netinfo == null )
    {
     return false;
    }
    if(netinfo.isConnected())
    {
     return true;
    }
    return false;
  
 } 
 

 

 

 

网络连接广播处理

public class ConnectionChangeReceiver extends BroadcastReceiver {  

  

    private static final String TAG =ConnectionChangeReceiver.class.getSimpleName();  

      

    @Override   

    public void onReceive(Context context, Intent intent) {   

    Log.e(TAG, "网络状态改变");   

  

    boolean success = false;   

  

    //获得网络连接服务    

    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);   

    // State state = connManager.getActiveNetworkInfo().getState();   

    // 获取WIFI网络连接状态   

    State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();   

    // 判断是否正在使用WIFI网络    

    if (State.CONNECTED == state) {  

    success = true;   

    }   

    // 获取GPRS网络连接状态    

    state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();  

    // 判断是否正在使用GPRS网络    

    if (State.CONNECTED != state) {   

    success = true;   

    }   

  

    if (!success) {   

    Toast.makeText(context, context.getString(R.string.your_network_has_disconnected), Toast.LENGTH_LONG).show();   

    }    

    }  

 
 
 
public class ConnectionChangeReceiver extends BroadcastReceiver {

    private static final String TAG =ConnectionChangeReceiver.class.getSimpleName();
    
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.e(TAG, "网络状态改变"); 

    boolean success = false; 

    //获得网络连接服务 
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    // State state = connManager.getActiveNetworkInfo().getState(); 
    // 获取WIFI网络连接状态
    State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); 
    // 判断是否正在使用WIFI网络 
    if (State.CONNECTED == state) {
    success = true; 
    } 
    // 获取GPRS网络连接状态 
    state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
    // 判断是否正在使用GPRS网络 
    if (State.CONNECTED == state) { 
    success = true; 
    } 

    if (!success) { 
    Toast.makeText(context, context.getString(R.string.your_network_has_disconnected), Toast.LENGTH_LONG).show(); 
    }  
    }

记得在Manifest文件里面进行权限声明,和广播接收器注册。

< !-- Needed to check when the network connection changes -->   

< uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>   

< receiver android:name="you_package_name.ConnectionChangeReceiver"   android:label="NetworkConnection">   

< intent-filter>   

      < action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>   

< /intent-filter>   

< /receiver> 


使用方式一:

1. 在Activity的onCreate中:
//注册网络监听 
IntentFilter filter = new IntentFilter();  
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
registerReceiver(mNetworkStateReceiver, filter); 
2. 在Activity中的onDestroy中:
//取消监听
unregisterReceiver(mNetworkStateReceiver); 


使用方式二:

1. 应用启动时,启动Service,在Service的onCreate方法中注册网络监听:

//注册网络监听 
IntentFilter filter = new IntentFilter();  
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
registerReceiver(mNetworkStateReceiver, filter); 

2. 应用退出时,Service关闭,在Service的onDestroy方法中取消监听:
//取消监听
unregisterReceiver(mNetworkStateReceiver); 


 

 

 

 

1楼l375852247昨天 16:49给你顶顶

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3