gpt4 book ai didi

android - 字符串引用不应该用于 AndroidManifest 中 Intent 过滤器的操作名称吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:28 26 4
gpt4 key购买 nike

最初我的 AndroidManifest.xml 包含我通过其自定义操作名称访问的 Activity 。

<activity
android:label="HERE I AM"
android:name="TestController">
<intent-filter>
<action android:name="com.company.project.TestActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

有了这份 list startActivity(new Intent("com.company.project.TestActivity"));开始我的 Activity 没有任何问题。

但我对这种编码风格并不满意。早些时候,我曾多次被告知不要使用内联定义的字符串常量,因为这会导致代码的可维护性降低。这确实是一个观点。

所以首先我声明了一个 p ublic static final String MY_ACTION = "com.company.project.TestActivity";在我的 App.java 类(我用于 的那个)中,并以这种方式通过这个命名常量到达我的组件:

startActivity(new Intent(App.MY_ACTION));

这看起来好多了,但我仍然必须维护同一字符串的两个实例。在 http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name一读

... This may also be a reference to a resource (in the form "@[package:]type:name") or theme attribute (in the form "?[package:][type:]name") containing a value of this type.

所以我猜想将此字符串定义为 JUST ONCE 会很好。我把<string name="MY_ACTION">com.company.project.TestActivity</string>在我的 strings.xml 中修改了我的应用程序:

public class App ...
public static String MY_ACTION;

@Override
public void onCreate() {
super.onCreate();
MY_ACTION = getString(R.string.MY_ACTION);
...

一切都还好

...直到我将 AndroidManifest.xml 更改为使用 <action android:name="@string/MY_ACTION" />而不是 <action android:name="com.company.project.TestActivity" /> .令我最惊讶的是,此更改后,应用程序在运行时崩溃,提示找不到符合我 Intent 的 Activity。可能未正确解析字符串引用。 :(

也许问题在于 R.string 依赖于配置...?但是,嘿,我不能这么疯狂地选择这样一个字符串引用,它的值可能会随着配置的不同而改变! developer.android.com 告诉我没问题。在 Action 名称处使用引用!我在 API levels 6, 7, end 8 遇到过这种行为。这只是 android 系统中的一个简单错误吗?还是我误解了什么?

我很困惑,请帮帮我。提前致谢。

最佳答案

我今天遇到了同样的问题,然后去别处寻找答案。根据 Dianne Hackborne 的说法,我们正在尝试做的事情似乎是不允许的。您显然必须在 Intent 过滤器中使用文字字符串。

http://android.bigresource.com/Track/android-zKGKHraw9/

关于android - 字符串引用不应该用于 AndroidManifest 中 Intent 过滤器的操作名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4434478/

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