小编Zso*_*ora的帖子

字符串引用不应该适用于AndroidManifest中的intent过滤器的动作名称吗?

最初我的AndroidManifest.xml包含一个我通过其自定义操作名称到达的活动.

<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>
Run Code Online (Sandbox Code Playgroud)

随着这个清单startActivity(new Intent("com.company.project.TestActivity"));开始我的活动没有任何问题.

但我对这种编码风格并不满意.早期我被告知不要使用内联定义的字符串常量,因为它会导致代码的可维护性降低.这真的一个问题.

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

startActivity(new Intent(App.MY_ACTION));

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

...这也可能是对包含值的资源(格式为"@ [package:] type:name")或主题属性(格式为"?[package:] [type:] name")的引用这种类型.

所以我猜想将这个字符串定义为JUST ONCE会很好.我输入<string name="MY_ACTION">com.company.project.TestActivity</string>了我的strings.xml并修改了我的App:

public class App ...
    public static String MY_ACTION;

    @Override
    public void onCreate() {
        super.onCreate();
        MY_ACTION = getString(R.string.MY_ACTION);
    ...
Run Code Online (Sandbox Code Playgroud)

一切都还行

...直到我改变我的AndroidManifest.xml <action android:name="@string/MY_ACTION" />而不是使用 <action android:name="com.company.project.TestActivity" />.在此次更改后,我最大的惊喜是应用程序在运行时崩溃,抱怨没有为我的意图找到活动.字符串引用可能未正确解析.:(

也许问题是R.string依赖于配置......?但是嘿,我不能这么疯狂地选择这样一个字符串引用,其值可能会从config更改为config!developer.android.com告诉我,在动作名称中使用引用是可以的!我在API级别6,7,结束8时遇到过这种行为.它只是android系统中的一个简单错误吗?或者我误解了什么?

我完全不解,请帮帮我.提前致谢.

android action string-literals intentfilter android-manifest

10
推荐指数
1
解决办法
2548
查看次数