Rumah > Soal Jawab > teks badan
昨晚在更新了公司的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.
报错信息是,我没有声明权限?查了一下,我是有声明的:
<?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结束前,要加入写权限,这样做,才,没问题...
那,是为什么要这样做...?
PHP中文网2017-04-17 18:03:40
Penyelesaian ini terlalu pelik, saya percaya ia bukan penyelesaian yang betul!
Android 6.0 (API LEVEL 23) perlu memohon kebenaran secara dinamik pada masa hadapan. Sudah tentu, kebenaran juga perlu diisytiharkan dalam aplikasi kebenaran Dinamik memerlukan pelanggan untuk memohon kebenaran secara aktif daripada pengguna dalam bentuk tetingkap dialog sebelum menjalankan operasi jika aplikasi berjaya, maka lakukan operasi berikutnya jika aplikasi gagal (atau tidak terpakai sama sekali), lakukan secara langsung operasi yang memerlukan permohonan kebenaran. Kemudian tunggu sahaja ralat dilaporkan...
Terdapat banyak perpustakaan yang dibungkus dengan baik di github, anda boleh mempelajarinya sendiri. Sangat disyorkan untuk menggunakan:
googlesamples/easypermissions
p.s. Perpustakaan lain akan sentiasa menghadapi masalah, sila lihat isu untuk butirannya.