java - Android google maps v2 无法在移动互联网(3g 或 4g)上运行,但可以在 wifi 上运行

标签 java android google-maps android-maps-v2 android-maps

我正在为 Geo fencing 开发一个 android 应用程序,它使用 Google map v2 加载 map 。我面临的问题是,在使用 3G 或 4G 网络连接初始化 map 时,出现空白屏幕。一段时间后,应用程序在使用 WIFI 初始化时变得无响应, map 初始化没有任何延迟和任何次数。 我将嵌入下面的代码

GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        try {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
            StrictMode.ThreadPolicy policy = new
                    StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
            queue = Volley.newRequestQueue(getApplicationContext());
            pref = getPreferences( Context.MODE_PRIVATE );

            //db MANAGER
            dbManager = new DBManager(this);
            dbManager.open();

            InitializeClient();
            InitializeDB();



        } catch (Exception e) {
            e.printStackTrace();
        }

        mqtt=new MQTT();
        try{
            if(ip==null){
                System.out.println("Mqtt Initialized in Maps Activity");
                ip="demo.aiotm.in:1883";
            }
            //mqtt.setHost("tcp://"+ip);
            mqtt.setHost("tcp://10.30.60.242:1883");
            connection = mqtt.blockingConnection();
            connection.connect();
        }catch (Exception e){
            e.printStackTrace();

        }

    }

    private void InitializeClient() {
        try {
if (mMap==null){
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    //Initializing googleApiClient
    googleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    googleApiClient.connect();

    if (mMap==null){
        Toast.makeText(getApplicationContext(),"Sorry Unable to create maps",Toast.LENGTH_SHORT).show();
    }
}
        }catch (Exception e){e.printStackTrace();}




        if (this.mMap != null) {

            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }else {
                System.out.println(":::::::::::::::::::::::::::::::::: Map Not Initialized :::::::::::::::::::::::::::::::::::::::::;");}
            mMap.setMyLocationEnabled(true);


        }
        if (googleApiClient.isConnected()||googleApiClient.isConnecting()){System.out.println("------------------------------------>Api is connecting<-----------------------------------");}


    }
 @Override
    protected void onResume() {
        super.onResume();
        InitializeClient();
        getCurrentLocation();


    }

    @Override
    protected void onPause() {
        super.onPause();


    }

我在 list 文件中授予的权限

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

    <uses-feature android:name="android.hardware.location.gps" />
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

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

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

有人遇到过这样的问题吗?如果有解决方案,请与我分享!

最佳答案

我不认为问题是 map 初始化,看来你在这里在主线程上建立连接

mqtt = new MQTT();
try {
    if (ip == null) {
        System.out.println("Mqtt Initialized in Maps Activity");
        ip = "demo.aiotm.in:1883";
    }
    //mqtt.setHost("tcp://"+ip);
    mqtt.setHost("tcp://10.30.60.242:1883");
    connection = mqtt.blockingConnection();
    connection.connect();
} catch (Exception e) {
    e.printStackTrace();
}

并且可能这个地址 tcp://10.30.60.242:1883 只能在您的内部 wifi 网络中访问,因此在通过移动数据连接进行测试时调用超时

关于java - Android google maps v2 无法在移动互联网(3g 或 4g)上运行,但可以在 wifi 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45052753/

相关文章:

java - Java 中的近似最小反馈弧集实现

java - 错误的类文件使 ant 构建失败

Java + MySQL - 更新时覆盖行

android - 为什么键盘出现在 TabBar 之后?

android - 何时何地调用 GC_CONCURRENT?

android - 在 map fragment 之上设置一个 TextView

android - Google Developer Console - 同意屏幕 - 自定义产品 Logo 不起作用

JLIST 上的 Java 空指针异常

android - 如何为 ListItem 制作自定义上下文菜单(如在 Baconreader 中)?

r - 如何在R中的 map 中的特定位置绘制数据点