应用程序在已发布的APK中以编程方式停止GPS位置请求

时间:2018-02-19 10:20:14

标签: android xamarin xamarin.android android-gps

更新

忘记提到这是一个xamarin编码。

如果有帮助:
我将android选项中的链接选项从none更改为仅限sdk程序集 我也启用了proguard

我遇到了有关位置请求的问题但仅在发布的apk中,它总是说应用程序已停止。我试图调试它并找到发生异常的部分。我的应用程序在调试模式下运行良好,所以我无法解释为什么它在发布的apk测试期间遇到异常。使用华硕zenfone 3 Nougat和OPPO棒棒糖进行测试,结果相同(发布时失败,调试时没有问题)。

以下是我的代码的一部分

    public void m4_setUpAllClickable()
    {
        try
        {
            btnEnableGPS.Click += delegate
            {
                enableGPSLocation();
            };
        }
        catch { throw; }
    }

    private async void enableGPSLocation()
    {
        try
        {
            GoogleApiClient
                googleApiClient = new GoogleApiClient.Builder(this)
                    .AddApi(LocationServices.API)
                    .Build();

            googleApiClient.Connect();

            LocationRequest
                locationRequest = LocationRequest.Create()
                    .SetPriority(LocationRequest.PriorityHighAccuracy)
                    .SetSmallestDisplacement(LocationValues.minimunDisplacement)
                    .SetInterval(LocationValues.normalInterval)
                    .SetFastestInterval(LocationValues.fastestInterval);

            LocationSettingsRequest.Builder
                locationSettingsRequestBuilder = new LocationSettingsRequest.Builder()
                    .AddLocationRequest(locationRequest);

            locationSettingsRequestBuilder.SetAlwaysShow(false);

//****** -> Problem Occur in this part and I don't know why since it is going straight to app has stopped instead of catch exception
            LocationSettingsResult
                locationSettingsResult = await LocationServices.SettingsApi.CheckLocationSettingsAsync(
                    googleApiClient, locationSettingsRequestBuilder.Build());
//****** -> ends here

            if (locationSettingsResult.Status.StatusCode == CommonStatusCodes.ResolutionRequired)
            {
                locationSettingsResult.Status.StartResolutionForResult(this, 1);
            }
            else if (locationSettingsResult.Status.StatusCode == CommonStatusCodes.Success)
            {
                if (activitySource == "GPS Failed")
                {
                    Intent intent;
                    intent = new Intent(this, typeof(Activity_AssignedList));
                    StartActivity(intent);
                    FinishAffinity();
                }
                else if (activitySource == "GPS Disabled")
                {
                    Finish();
                }
            }
        }
        catch { throw; }
    }

2 个答案:

答案 0 :(得分:1)

您是否已将proguard规则添加到项目中?如果没有,请尝试此操作并重新运行发布版本

-keep public class com.google.android.gms.* { public *; }
-dontwarn com.google.android.gms.**

答案 1 :(得分:0)

正如@SushiHangover建议发表评论时,我试图将我的应用程序链接选项从sdk程序集更改为none,并且它在发布的apk上运行良好。我不知道为什么在本教程中:https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/它表示启用proguard并将链接选项从none更改为sdk程序集,所以我的确使我的应用程序更小。它从66mb下降到40mb所以我认为它是一件好事,但问题是它削减了我的应用程序所需的一些类。

到目前为止,它的工作没有链接选项,我的proguard仍然启用。谢谢你的帮助!