検索

ホームページ  >  に質問  >  本文

关于Android的写权限

1. 问题描述

昨晚在更新了公司的app,接着推送出去了,发现有人反馈说自动更新用不了。我调试了一下,定位到代码和报错信息如下:
代码:

               try {
                    //创建下载任务,downloadUrl就是下载链接
                    DownloadManager.Request request = new DownloadManager.Request(Uri.parse("xxxx下载链接"))
                            .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOCUMENTS, "Honey_.apk")
                            .setTitle("下载标题")
                            .setMimeType("")
                            .setVisibleInDownloadsUi(true)
                            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
                            .setDescription("下载的具体描述");
                    //获取下载管理器
                    DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                    //将下载任务加入下载队列,否则不会进行下载
                    long TaskID = downloadManager.enqueue(request);
                    LogUtils.e(OpenLog,TAG,"TaskId:"+TaskID);
                } catch (Exception e) {
                    LogUtils.e(OpenLog,TAG,"Exception2:"+e.getMessage());
                }

long TaskID = downloadManager.enqueue(request);这里,抛出异常了:

E/MainActivity: Exception2:need WRITE_EXTERNAL_STORAGE permission to use DESTINATION_FILE_URI: uid 10207 does not have android.permission.WRITE_EXTERNAL_STORAGE.

2. 解决答案

报错信息是,我没有声明权限?查了一下,我是有声明的:

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

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

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

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

        <activity android:name=".chestnut.DialogActivity"
            android:theme="@style/DialogTransparent" />

    </application>

</manifest>

之前一直是这样声明的,也没有报错什么的,
然后,Google,百度一下,发现,要写成如下的:

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

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

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

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

    </application>

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

</manifest>

额,Application开始前,Manifest开始后,要加入写权限,Application结束后,Manifest结束前,要加入写权限,这样做,才,没问题...

那,是为什么要这样做...?

大家讲道理大家讲道理2772日前413

全員に返信(1)返信します

  • PHP中文网

    PHP中文网2017-04-17 18:03:40

    この解決策は奇妙すぎるので、正しい解決策ではないと思います!

    Android 6.0 (API レベル 23) では、将来的に権限を動的に申請する必要があります。もちろん、動的権限アプリケーションでは、クライアントがユーザーからの権限を積極的に申請する必要があります。アプリケーションが成功した場合は、その後の操作を続行し、アプリケーションが失敗した場合は、許可の適用が必要な操作を直接実行してから待機します。報告されるエラー...

    github には適切にパッケージ化されたライブラリが多数あります。自分で学習することができます。

    を使用することを強くお勧めします。
    • googlesamples/easypermissions

    追伸。他のライブラリには常に問題が発生します。詳細については、問題を参照してください。

    返事
    0
  • キャンセル返事