Android google maps v2 не работает в мобильном интернете (3g или 4g), но работает на Wi-Fi
Я разрабатываю приложение для Android для Гео фехтования, и оно использует Google map v2 для загрузки карт. Проблема, с которой я сталкиваюсь, заключается в том, что при инициализации карты с помощью сетевых подключений 3G или 4G я получаю пустой экран. Через некоторое время приложение перестает отвечать на запросы при инициализации с Wi-Fi карты инициализируются без каких-либо задержек и любое количество раз. Я вставлю коды ниже
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();
}
Разрешения, которые я дал в файле манифеста
<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"/>
Имеет кто-нибудь сталкивался с подобными проблемами ? Если есть решение, Пожалуйста, поделитесь им со мной !
1 ответ:
Я не думаю, что проблема заключается в инициализации карты, похоже, что вы устанавливаете соединение в главном потоке здесь
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
доступен только в вашей внутренней сети Wi-Fi, поэтому вызов goeas в таймаут при тестировании через мобильное соединение передачи данных