Java Can';t在Android中将单元格ID和Lac转换为纬度和经度

Java Can';t在Android中将单元格ID和Lac转换为纬度和经度,java,android,google-maps,Java,Android,Google Maps,我正在尝试获取我的应用程序中的所有用户手机和位置信息,并将它们显示在一些文本视图中。我得到的所有信息都是正确的,但它并没有返回纬度和经度。它显示“找不到位置”。我检查了它,发现我的“httpConn.Connect()”语句正在引发异常。我不知道为什么它会抛出异常。我已授予所需的所有权限。我该怎么办 这是我的密码: public class CellActivity extends AppCompatActivity { private static String TAG = CellActi

我正在尝试获取我的应用程序中的所有用户手机和位置信息,并将它们显示在一些文本视图中。我得到的所有信息都是正确的,但它并没有返回纬度和经度。它显示“找不到位置”。我检查了它,发现我的“httpConn.Connect()”语句正在引发异常。我不知道为什么它会抛出异常。我已授予所需的所有权限。我该怎么办

这是我的密码:

public class CellActivity extends AppCompatActivity {

private static String TAG = CellActivity.class.getSimpleName();
int myLatitude,myLongitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cell);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    TelephonyManager telephonyManager=(TelephonyManager) this.getSystemService(this.TELEPHONY_SERVICE);
    String serialNum=telephonyManager.getSimSerialNumber();
    String deviceId=telephonyManager.getDeviceId();
    GsmCellLocation location=(GsmCellLocation) telephonyManager.getCellLocation();
    int cid=location.getCid();
    int lac=location.getLac();
    String networkOperator = telephonyManager.getNetworkOperator();
    int mcc = Integer.parseInt(networkOperator.substring(0, 3));
    int mnc = Integer.parseInt(networkOperator.substring(3));
    String oName=telephonyManager.getNetworkOperatorName();

    TextView sim=(TextView) findViewById(R.id.sim);
    TextView deviceID=(TextView) findViewById(R.id.deviceId);
    TextView cellId=(TextView) findViewById(R.id.cellId);
    TextView mccb=(TextView) findViewById(R.id.mcc);
    TextView mncb=(TextView) findViewById(R.id.mnc);
    TextView operator=(TextView) findViewById(R.id.operator);
    TextView lacb=(TextView) findViewById(R.id.lac);
    TextView operatorName=(TextView) findViewById(R.id.operatorName);
    TextView position=(TextView) findViewById(R.id.position);

    sim.setText("serial no. : "+serialNum);
    deviceID.setText("device id : "+deviceId);
    cellId.setText("cid : "+cid);
    mccb.setText("mcc : "+mcc);
    mncb.setText("mnc : "+mnc);
    operator.setText("operator : "+networkOperator);
    lacb.setText("lac : "+lac);
    operatorName.setText(oName);

    if(RqsLocation(cid, lac)){
        position.setText(
                String.valueOf((float)myLatitude/1000000)
                        + " : "
                        + String.valueOf((float)myLongitude/1000000));
    }else{
        position.setText("Can't find Location!");
    }
}

private Boolean RqsLocation(final int cid,final int lac){

    Boolean result = false;

    final String urlmmap = "http://www.google.com/glm/mmap";

    try {
        URL url = new URL(urlmmap);
        URLConnection conn = url.openConnection();
        HttpURLConnection httpConn = (HttpURLConnection) conn;
        httpConn.setRequestMethod("POST");
        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);
        try {
            httpConn.connect();
        }catch(Exception e)
        {
            e.printStackTrace();
        }

        OutputStream outputStream = httpConn.getOutputStream();
        WriteData(outputStream, cid, lac);

        InputStream inputStream = httpConn.getInputStream();
        DataInputStream dataInputStream = new DataInputStream(inputStream);

        dataInputStream.readShort();
        dataInputStream.readByte();
        int code = dataInputStream.readInt();
        if (code == 0) {
            myLatitude = dataInputStream.readInt();
            myLongitude = dataInputStream.readInt();

            result = true;

        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return result;

}

private void WriteData(OutputStream out, int cid, int lac)
        throws IOException
{
    DataOutputStream dataOutputStream = new DataOutputStream(out);
    dataOutputStream.writeShort(21);
    dataOutputStream.writeLong(0);
    dataOutputStream.writeUTF("en");
    dataOutputStream.writeUTF("Android");
    dataOutputStream.writeUTF("1.0");
    dataOutputStream.writeUTF("Web");
    dataOutputStream.writeByte(27);
    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(3);
    dataOutputStream.writeUTF("");

    dataOutputStream.writeInt(cid);
    dataOutputStream.writeInt(lac);

    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(0);
    dataOutputStream.writeInt(0);
    dataOutputStream.flush();
}
}
这是我的舱单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sachinparashar.celldemo">

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".CellActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>


看起来您正试图在UI线程上发出网络请求-我猜这是您看到的异常。尝试使用AsyncTask或类似工具将RqsLocation调用移动到后台线程。

即使我也有同样的问题,但我有异常“java.io.IOException:不允许到www.google.com的明文HTTP流量”

如果使用Android 9 Pie,则必须在清单应用程序中设置networkSecurityConfig

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
     <application android:networkSecurityConfig="@xml/network_security_config">
     </application>
</manifest>

在res/xml/network\u security\u config.xml内创建文件并添加以下代码

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>


什么是异常?请在logcat中提供错误消息