Я получаю параметры соединения для моего HTTP-вызова, используя следующий код:
Это работает на моих тестовых телефонах и эмуляторах.Однако для некоторых людей (возможно, просто 9700 пользователей, но я не могу этого гарантировать) это вызывает ошибки "Failed to transmit"
, даже если у них есть работающее соединение 3G / wifi.
Что я делаю не так?
private String getConnectionParameters()
{
String strCP = null;
int coverageStatus = CoverageInfo.getCoverageStatus();
if((coverageStatus & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT)
{
// Carrier coverage
String carrierUid = getCarrierBIBSUid();
if(carrierUid == null)
{
String wap2 = getWAP2ServiceRecord();
if (wap2 != null)
{
// Try using WAP2
strCP = ";deviceside=false;connectionUID="+wap2;
}
else
{
// Has carrier coverage, but not BIBS or WAP2. So use the carrier's TCP network
strCP = ";deviceside=true";
}
}
else
{
// otherwise, use the Uid to construct a valid carrier BIBS request
strCP = ";deviceside=false;connectionUID="+carrierUid + ";ConnectionType=mds-public";
}
}
else if((coverageStatus & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS)
{
// MDS coverage found
strCP = ";deviceside=false";
}
else if((WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) && RadioInfo.areWAFsSupported(RadioInfo.WAF_WLAN))
{
// Device is connected via Wifi
strCP = ";interface=wifi";
}
else if(coverageStatus == CoverageInfo.COVERAGE_NONE)
{
// There is no available connection
strCP = "";
}
else
{
// no other options found, assuming device
strCP = ";deviceside=true";
}
return strCP;
}
private String getCarrierBIBSUid()
{
ServiceRecord[] records = ServiceBook.getSB().getRecords();
for(int i = 0; i < records.length; i++)
{
if(records[i].getCid().toLowerCase().equals("ippp"))
{
if(records[i].getName().toLowerCase().indexOf("bibs") >= 0)
{
return records[i].getUid();
}
}
}
return null;
}
private String getWAP2ServiceRecord()
{
ServiceBook sb = ServiceBook.getSB();
ServiceRecord[] records = sb.getRecords();
for (int i = 0; i < records.length; i++)
{
String cid = records[i].getCid().toLowerCase();
String uid = records[i].getUid().toLowerCase();
if ((cid.indexOf("wptcp") != -1) && (uid.indexOf("wifi") == -1) && (uid.indexOf("mms") == -1))
{
return records[i].getUid();
}
}
return null;
}