【问题标题】:Permission Denial:broadcasting Intent is not exportedPermission Denial:广播 Intent 未导出
【发布时间】:2013-07-20 05:32:47
【问题描述】:

我有以下代码:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()))); 在我的清单中,我添加了:

           <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
            <action android:name="android.intent.ACTION_MEDIA_MOUNTED"/>
            <action android:name="android.intent.action.MEDIA_EJECT" />
            <action android:name="android.intent.ACTION_MEDIA_SCANNER_SCAN_FILE"/>
            <data android:scheme="file"/>
        </intent-filter>
    </activity>
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

我收到以下错误

07-20 13:16:31.203: WARN/BroadcastQueue(395): Permission Denial: broadcasting Intent { act=android.intent.action.MEDIA_MOUNTED dat=file:///storage/sdcard0 flg=0x10 } from com.example.Music_Exchanger (pid=11797, uid=10080) is not exported from uid 10016 due to receiver com.android.providers.downloads/com.android.providers.downloads.DownloadReceiver

我不知道为什么会被拒绝。还有怎么解决???

如果你知道,请帮助我,并请写得更详细。我只是一个初学者。

非常感谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    实现广播接收器并将其定义添加到清单文件中:

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <!--...-->
    
        <receiver
            android:name=".CustomReceiver"
            android:exported="true" >
        </receiver>
    </application>
    

    CustomReciever 扩展 BroadcastReceiver 的地方。

    【讨论】:

    • 你是如何解决这个问题的?你在 CustomReciever 中添加了什么?
    【解决方案2】:

    添加

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

    另外说明:写外存隐含有读外存权限。

    【讨论】:

      【解决方案3】:

      使用 MediaScannerConnection 代替 SendBroadcast..

      conn = new MediaScannerConnection( * * your context * * ,
           new MediaScannerConnection.MediaScannerConnectionClient() {@
               Override
               public void onScanCompleted(String path, Uri uri) {
      
                   if (path.equals( * * your filename * * .getAbsolutePath())) {
                       Log.i("Scan Status", "Completed");
                       Log.i("uri: ", uri.toString());
      
                       conn.disconnect();
                   }
               }@
               Override
               public void onMediaScannerConnected() {
                   // TODO Auto-generated method stub
                   conn.scanFile( * * your file name * * .getAbsolutePath(), null);
      
               }
           });
       conn.connect();
      

      【讨论】:

        猜你喜欢
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多