9

元々私のAndroidManifest.xmlには、カスタムアクション名で到達したアクティビティが含まれていました。AndroidManifestのインテントフィルタのアクション名に文字列参照を使用しないでください。

<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> 

このマニフェストでは、startActivity(new Intent("com.company.project.TestActivity"));は問題なく私の活動を開始しました。

しかし、私はこのコーディングスタイルに満足していませんでした。初期の段階では、定義されていない文字列定数を使用しないように言われていました。本当にです。

だから最初に私は私のApp.javaクラス(私が使用したもの)で、AP ublic static final String MY_ACTION = "com.company.project.TestActivity";を宣言し、この名前付き定数このようを通じて私のコンポーネントに達し:

startActivity(new Intent(App.MY_ACTION));

これは、はるかに良いように見えたが、私はまだ同じ文字列の2つのインスタンスを維持する必要がありました。 http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name

を読む...これは、リソースへの参照であり(形で「@ [パッケージ:]:名前タイプ」)形態またはテーマの属性(「[パッケージ:]? [type:] name ")。この型の値を含んでいます。

だから私はこの文字列をだけ定義しておいてほしいと思いました。私は自分のstrings.xmlに<string name="MY_ACTION">com.company.project.TestActivity</string>を入れて、私のアプリを修正:

public class App ... 
    public static String MY_ACTION; 

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

、すべてがまだO.K.ました

...まで<action android:name="com.company.project.TestActivity" />の代わりに<action android:name="@string/MY_ACTION" />を使用するようにAndroidManifest.xmlを変更しました。 私の最大の驚きにこの変更の後、アプリケーションは実行時に私の意図のためのアクティビティを見つけられなかったという不満を訴えた。文字列参照が正しく解析されていない可能性があります。 :(

多分問題はR.stringが設定に依存しているということです...?でも、値がconfigからconfigに変わるかもしれないそのような文字列参照を選ぶのはそんなに難しくありません!そしてdeveloper.android.comは私はAPIのレベル6,7、エンド8でこの動作を経験しました。アンドロイドシステムの単純なバグですか?何かを誤解しますか?

私は完全に困惑しています。私に助けてください前もってありがとう

答えて

4

私は今日、同じ問題を抱えていて、別の場所で答えを探していました。私たちがやろうとしていることは許可されていません。インテントフィルタにl個の文字列があります。

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

+0

こんにちはMarkG、おかげで、私はまた、この状況であると考えている傾向にあります。設定に依存する文字列と独立した文字列を分離できる大人としては扱われません。私はあなたの答えを受け入れる。 –

関連する問題