【问题标题】:Error updating App(sdk 23) on Play Store在 Play 商店更新 App(sdk 23) 时出错
【发布时间】:2016-09-28 12:20:46
【问题描述】:

我在 Play 商店中提交了我的应用程序 (sdk 23) 的更新版本,并且在必须在 Beta 测试器中发布该部分时给出了此权限错误。

我已经用 requestPermission 为 sdk 23 完成了更改:

if (Utils.isMarshmallow()) {
    if (ContextCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(activity, new String[] {android.Manifest.permission.ACCESS_COARSE_LOCATION},
                    Utils.MY_PERMISSION_ACCESS_COARSE_LOCATION);
    }
}

但是考虑使用 Android sdk

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> `

我的 build.gradle 是:

android {
    compileSdkVersion 23 
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "br.com.app.vertz"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 36
        versionName "2.8"
    }
...

仍然收到错误消息:

无法将之前使用 M 权限(SDK 23 及更高版本)的设备降级为使用旧式权限(SDK 22 及更低版本)的 APK。将版本 32 (23 SDK) 更改为版本 29 (SDK 19) 时会出现这种情况。

【问题讨论】:

    标签: android google-play-services


    【解决方案1】:

    您还需要请求 WRITE_EXTERNAL_STORAGE 的运行时权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    //声明权限和请求代码

    private static final String[] REQUEST_PERMISSIONS = new String[]{
                Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION
        };
        private static final int REQUEST_PERMISSION_CODE = 007;
    

    //检查是否需要权限

           if (!checkPermission()) {
                requestPermission();
            } else {
    //perform your task      
      }
    
    
    
    private boolean checkPermission () {
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                    return true;
                }
                for (String permission : REQUEST_PERMISSIONS) {
                    if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                        return false;
                    }
                }
    
    
                return true;
            }
        private void requestPermission () {
            ActivityCompat.requestPermissions(this, REQUEST_PERMISSIONS, REQUEST_PERMISSION_CODE);
        }
    
        @Override
        public void onRequestPermissionsResult ( int requestCode, @NonNull String[] permissions,
        @NonNull int[] grantResults){
            if (requestCode == REQUEST_PERMISSION_CODE) {
                if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //perform your task
                }
            }
        }
    

    【讨论】:

    • 这个答案非常重要,应该在 Android 开发者文档中。自 API23 以来,很难理解 Android 开发人员关于权限的文档,我认为开发人员的文档过于政治化(有点政治化是可以的,但缺乏动手能力)。我已经完全出局了。这是一个非常清晰易懂的工作答案。此示例代码比文本页面要清晰得多。
    【解决方案2】:

    您的清单和/或 build.gradle 中的targetSdkVersion 应为 23 或更大。

    【讨论】:

    • 不知何故实际使用的值似乎是 19。重新检查所有清单副本,清除缓存等。
    猜你喜欢
    • 2021-03-08
    • 2017-11-21
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多