gpt4 book ai didi

java - 错误 : java. lang.SecurityException:权限拒绝:以另一种风格启动 Intent

转载 作者:行者123 更新时间:2023-12-01 11:14:45 24 4
gpt4 key购买 nike

我正在开发一个有两种风格的应用程序:免费版和专业版。免费似乎工作正常,但是当我尝试从首选项 Activity 设置转到 Activity 名称时,出现此错误:

-12 00:41:49.473  18533-18533/com.albertoha94.apps.DuelHelperReloaded.Pro E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.albertoha94.apps.DuelHelperReloaded.Pro, PID: 18533
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW cmp=com.albertoha94.apps.DuelHelperReloaded/.NameList } from ProcessRecord{9f48ed8 18533:com.albertoha94.apps.DuelHelperReloaded.Pro/u0a59} (pid=18533, uid=10059) not exported from uid 10060
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2611)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1502)
at android.app.Activity.startActivityForResult(Activity.java:3825)
at android.app.Activity.startActivityForResult(Activity.java:3785)
at android.app.Activity.startActivity(Activity.java:4100)
at android.app.Activity.startActivity(Activity.java:4068)
at android.preference.Preference.performClick(Preference.java:1012)
at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:214)
at android.widget.AdapterView.performItemClick(AdapterView.java:309)
at android.widget.AbsListView.performItemClick(AbsListView.java:1156)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3071)
at android.widget.AbsListView$3.run(AbsListView.java:3899)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5401)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)

我的模块的结构是这样的:

src
-debug
-java->package->Namelist
-main
-java->package->SettingsDuel
NameListStructure(A class that extends arrayAdapter, i use it to show the list in a format i want)
-pro
-layout->mainscreen(used in Dhmain)
-prodebug
-java->...DHMain
-prorelease
-java->...DHMain
-release
-java->...NameList

没有显示免费版本结构,因为我认为没有必要,它工作正常。

NameList 在发行版和调试版中都有,它们都有细微的更改,并且我创建了该目录,因此我不需要在 free/pro 目录中拥有副本。

DHMain 会根据其免费/专业版和调试/发布版而变化。

SettingsDuel 仅在 main 中,并且永远不会改变。

我通过这种方式通过 SettingsDuel 访问 Activity NameList:

<Preference
android:enabled="true"
android:title="@string/Names">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.albertoha94.apps.DuelHelperReloaded"
android:targetClass="com.albertoha94.apps.DuelHelperReloaded.NameList"/>
</Preference>

这是在主目录的 xml 文件中,它永远不会改变。这也是访问 NameList Activity 的唯一方法。

最后,appid 根据应用程序风格而变化(我认为这可能会导致问题,因为免费版本不会更改其 id 并且工作正常):

免费:

applicationId 'com.albertoha94.apps.DuelHelperReloaded'

亲:

applicationId 'com.albertoha94.apps.DuelHelperReloaded.Pro'

我尝试过以下方法:

-在 SettingsDuel 类中添加 android:exported="true"。

-在 NameList 类中添加 android:exported="true"。

-在两个类中添加 android:exported="true"。

-将类 NameList 添加到 pro 包(prodebug 和 proRelease)

-清理项目。

-重建项目。

此时我不知道还能尝试什么。

编辑:

按照 Minhtdh 在他的回答中所说的去做之后,它有点起作用了。仅当我安装了免费版本时, Activity 名称列表才有效。

如果我尝试仅使用专业版访问 Activity NameList,它会显示此错误:

    android.content.ActivityNotFoundException: Unable to find explicit activity class {com.albertoha94.apps.DuelHelperReloaded/com.albertoha94.apps.DuelHelperReloaded.NameList}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1782)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507)
at android.app.Activity.startActivityForResult(Activity.java:3825)
at android.app.Activity.startActivityForResult(Activity.java:3785)
at android.app.Activity.startActivity(Activity.java:4100)
at android.app.Activity.startActivity(Activity.java:4068)
at android.preference.Preference.performClick(Preference.java:1012)
at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:214)
at android.widget.AdapterView.performItemClick(AdapterView.java:309)
at android.widget.AbsListView.performItemClick(AbsListView.java:1156)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3071)
at android.widget.AbsListView$3.run(AbsListView.java:3899)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5401)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)

它说它无法找到 Activity NameList,即使我在 list 中有它( list 位于主目录中):

        <activity
android:name=".NameList"
android:label="@string/Names"
android:exported="true">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.albertoha94.apps.DuelHelperReloaded.SettingsDuel" />
</activity>

最佳答案

我认为您的问题是:您的专业版正在尝试在免费版本中启动服务。
从你的描述来看,我猜你只重建了专业版,对吗?
如果确实如此,您应该尝试以下操作:

  • 在 NameList 类中添加 android:exported="true"。
  • 然后重建并安装免费版本
  • 然后使用专业版运行并测试。

希望这有效。
更新
您的免费版本应用 ID 是 com.albertoha94.apps.DuelHelperReloaded
专业版是com.albertoha94.apps.DuelHelperReloaded.Pro
由于 SettingsDuel 首选项中的 Intent :

<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.albertoha94.apps.DuelHelperReloaded"
android:targetClass="com.albertoha94.apps.DuelHelperReloaded.NameList"/>

该 Intent 将尝试从免费应用程序打开 Activity (两个应用程序中的类名称和操作相同,但 targetPackage 限制仅打开免费版本的 Intent )
-> 所以当从专业应用程序打开时,如果不安装免费应用程序,您将出现权限错误(由于不同的进程)或activitynotfound

如果您想从专业版打开 Activity,只需为每个应用使用不同的 targetPackage 即可。(对于专业版,请使用 android:targetPackage="com.albertoha94.apps.DuelHelperReloaded。专业版”)

关于java - 错误 : java. lang.SecurityException:权限拒绝:以另一种风格启动 Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31971527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com