java - 安卓工作室 : App crashes on some phones

标签 java android android-studio location

我是 android 开发的新手,对这个问题感到很困惑。 我正在制作一个简单的应用程序,它有 3 个 TextView:text、text2 和 text3。

  • text 显示用户的纬度
  • text2显示用户的经度和
  • text3 显示用户与名为“Azadi Square”的地方之间的距离。

该应用程序在 Samsung Galaxy S4Samsung Galaxy Tab S 上正常运行,但在 Huawei Y511Sony Xperias 之一(我不知道确切的名称。),应用程序无法打开和说 App has unfortunately stopped

这是我的 Java 代码:

public class Map extends Activity implements LocationListener {

private TextView text,text2,text3;
private String provider;
private LocationManager locationManager;
private double latitude,longitude;
private Location azadiSquare;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);

    text = (TextView)findViewById(R.id.text);
    text2 = (TextView)findViewById(R.id.text2);
    text3 = (TextView)findViewById(R.id.text3);

    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria,false);

    azadiSquare = new Location(provider);
    azadiSquare.setLatitude(35.6996540);
    azadiSquare.setLongitude(51.3379906);

    Location location = locationManager.getLastKnownLocation(provider);


    text.setText(location.getLatitude()+"");
    text2.setText(location.getLongitude()+"");
    text3.setText(distanceBetweenMeter(azadiSquare,location)+"");
}

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

    locationManager.requestLocationUpdates(provider,400,1,this);
}

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

    locationManager.removeUpdates(this);
}

@Override
public void onLocationChanged(Location location) {
    latitude = location.getLatitude();
    longitude = location.getLongitude();

    text.setText(latitude+"");
    text2.setText(longitude+"");

    text3.setText(distanceBetweenMeter(azadiSquare,location)+"");
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
    // TODO Auto-generated method stub
}

@Override
public void onProviderEnabled(String s) {
    Toast.makeText(this,"Enabled new provider " + provider,Toast.LENGTH_LONG).show();
}

@Override
public void onProviderDisabled(String s) {
    Toast.makeText(this,"Disabled provider " + provider,Toast.LENGTH_LONG).show();
}


private double getDistanceFromLatLonInKm(double lat1,double lon1,double lat2,double lon2) {
    double R = 6371; // Radius of the earth in km
    double dLat = deg2rad(lat2-lat1);  // deg2rad below
    double dLon = deg2rad(lon2-lon1);
    double a =
            Math.sin(dLat/2) * Math.sin(dLat/2) +
                    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
                            Math.sin(dLon/2) * Math.sin(dLon/2)
            ;
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    double d = R * c; // Distance in km
    return d;
}

private double deg2rad(double deg) {
    return deg * (Math.PI/180);
}

private int distanceBetweenMeter(Location location1, Location location2){
    double distanceKM = getDistanceFromLatLonInKm(location1.getLatitude(),location1.getLongitude(),
            location2.getLatitude(),location2.getLongitude());
    int distanceMeter = (int)(distanceKM*1000);
    return distanceMeter;
}
}

注意:我刚刚删除了导入!

list 文件:

<?xml version="1.0" encoding="utf-8"?>

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

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

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

注意:我在打开应用程序之前打开了手机的位置,所以这不是问题所在。我想说的另一件事是,所有的计算都没有问题,而且它们运行良好。

最佳答案

Android 6.0(API 级别 23)及更高版本上,您需要在运行时请求 ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION 权限。看,Requesting Permissions at Run Time .可能是这样。

关于java - 安卓工作室 : App crashes on some phones,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562738/

相关文章:

java - 将 Java RSA 非对称加密转换为 Flutter Dart

java - 从闰年计算年数

android - 错误:无法初始化类org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.StaticVersionComparator

java - 从 ISO/IEC 19794-4 图像数据文件创建图像

java - MonoTouch + IKVM 项目中的 JIT 编译问题

java - Android - 找不到 com.android.tools.build :aapt2:3. 2.1-4818971。在以下位置搜索:

android - 使用计时器从 JSON 添加多个标记

android - Android Studio-错误:程序包java.awt.geom不存在

android - 需要 android 的 PJSIP 示例

android - 查看绑定(bind)未生成