Android:更改启动器活动时出现权限被拒绝错误

3

我有一个安卓应用程序,我试图启动它,但是它报错了。

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.hoosierag/.MainActivity } from null (pid=32395, uid=2000) not exported from uid 10125

当我尝试在清单文件中更改启动器活动时,出现了这个错误。当我在模拟器上启动它时,我没有遇到这个错误,但是当我尝试在设备上启动它时,就会出现这个错误。我已经在三个不同的安卓设备上尝试过,并且都出现了同样的错误。这是我的清单代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.hoosierag"
      android:versionName="1.11" android:versionCode="4">
        <uses-sdk android:minSdkVersion="3"/>
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
        <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
        <uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission>
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>


    <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">
        <activity android:name=".MainActivity" android:screenOrientation="portrait"
                  android:label="MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="Main" android:screenOrientation="portrait"/>
        <activity android:name="News" android:screenOrientation="portrait"/>
        <activity android:name="Audio" android:screenOrientation="portrait"/>

最初的启动活动是名为Main的活动。然后我创建了一个名为MainActivity的新活动,并将其设置为启动类。


你的日志中是否有关于权限拒绝的行,说明你的 Activity 的哪一行存在问题?或者是哪个权限导致了异常?通常这些信息都会在你粘贴的代码附近列出。 - FoamyGuy
我认为您只分享了清单的一部分?请分享整个清单代码。 - Vipul
你能提供MainActivity的第一行代码吗,它应该是类似于“package .............;”的形式。 - Dheeresh Singh
您的清单文件中在 activity 标签中缺少 android:exported="true" 指令。请注意:每当您指定了 intent-filter 指令,也必须考虑 android:exported 指令。 - ChuongPham
4个回答

8

Jomia所述

您看到的java.lang.SecurityException是因为您可能输入了两个指向相同活动的条目。删除第二个条目,然后您就可以正常运行了。

最后,在清单中将主要活动更改为MainActivity之后,请在设备上运行之前从项目->清理...中清理您的项目。


5

您应该尝试在AndroidManifest.xml文件中使用属性exported来标记MainActivity。例如:

<activity android:exported="true" android:name=".MainActivity" android:screenOrientation="portrait" android:label="MainActivity">

1

经常情况下,在 SecurityException 中需要 null 表示该组件未被导出。但这可能不是你的问题。当活动具有 <intent-filter> 标记时,它会自动导出。我建议:

  • 清理项目
  • 构建
  • 从设备中完全卸载应用程序
  • 重新安装

0

如果你使用GIT:
删除整个存储库文件夹,并将其与你的git服务器重新同步。


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