权限拒绝:...需要android.permission.WRITE_EXTERNAL_STORAGE权限

9

我最近遇到的难题是尝试使用我的程序写入SD卡。 我遇到了以下问题:

[2011-05-28 10:00:16 - LatinDictionary] ActivityManager: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.joelman.latindictionary/.LatinDictionary } from null (pid=-1, uid=-1) requires android.permission.WRITE_EXTERNAL_STORAGE

从我的清单文件中可以看出,我已经添加了权限(我也尝试将其添加到每个活动中,但无济于事)。我错过了什么?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.joelman.latindictionary"
      android:versionCode="1"
      android:versionName="1.0">
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:permission="android.permission.WRITE_EXTERNAL_STORAGE">
     <activity android:name=".LatinDictionary">
     <intent-filter>
     <action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
<intent-filter><action android:name="android.intent.action.SEARCH"></action>
</intent-filter>
</activity>

<provider android:name="DictionaryProvider" android:authorities="com.joelman.latindictionary.DictionaryProvider"></provider>
</application>

</manifest> 

TIA, Joel

2个回答

16

应该是这样的:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.joelman.latindictionary"
      android:versionCode="1"
      android:versionName="1.0">
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:permission="android.permission.WRITE_EXTERNAL_STORAGE">
     <activity android:name=".LatinDictionary">
     <intent-filter>
     <action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
<intent-filter><action android:name="android.intent.action.SEARCH"></action>
</intent-filter>
</activity>

<provider android:name="DictionaryProvider" android:authorities="com.joelman.latindictionary.DictionaryProvider"></provider>
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
</manifest> 

2
谢谢!!!注意:我还必须删除<application>节点的权限才能运行它。 - user568259
3
这两者有什么区别?<uses-permission>被移动了,但它最初在<manifest>元素中而不是<application>元素中,那么为什么在XML中<application>和<uses-permission>的顺序很重要呢? - Ribo
我把它放在<application/>标签外面,但是它在文件开头。将权限移动到<application/>标签之后使其正常工作。 - Utkarsh Sinha

7
将权限行放在application标签外面,但在manifest标签内部。

那应该是正确的答案。此外,请注意,新的Android SDK版本包括一个“lint”工具,以便事先查找这种错误。 - Sebastian Roth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接