2011-07-04 4 views
1

私は検索して検索しましたが、カスタムインテントに関するこの特定の質問に対する答えを見つけることはできません。Androidカスタムインテントがアクティビティを開始できない(はい、デフォルトカテゴリが含まれています)

私は4つのアクティビティを持つアプリケーションを用意しています.1つは設定を行うメインで、もう1つはユーザーに提示するさまざまなスクリーンを表します。私はさまざまなアクティビティを開始するためにカスタムインテントを使用しようとしています。私は、アプリケーションごとにカテゴリを作成し、アクションの2種類が、私はそれを処理したい

<?xml version="1.0" encoding="utf-8"?> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".Activities.REDB_main" android:label="@string/app_name" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Activities.ChooseCards" android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="@string/ACTION_VIEW" /> 
      <action android:name="@string/ACTION_REFRESH" /> 
      <category android:name="@string/CATEGORY_SHUFFLE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Activities.SelectSets" android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="@string/ACTION_VIEW" /> 
      <action android:name="@string/ACTION_REFRESH" /> 
      <category android:name="@string/CATEGORY_SELECT_SETS" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Activities.SelectCards" android:launchMode="singleTop" 
     android:permission="android.permission.ACCESS_CHECKIN_PROPERTIES"> 
     <intent-filter> 
      <action android:name="@string/ACTION_VIEW" /> 
      <action android:name="@string/ACTION_REFRESH" /> 
      <category android:name="@string/CATEGORY_SELECT_CARDS" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
</application> 

は、ここに私のAndroidManifext.xmlです。私は明示的な意図を使用することができることを知っていますが、私は異なる行動をしたいので、暗黙的な意図を作ることがより効果的であると考えました。

私はこれで私のメインの中から私の本当の活動の最初の呼び出し:

もちろん
Intent intent = new Intent().setAction(getString(R.string.ACTION_VIEW)); 
intent.addCategory(getString(R.string.CATEGORY_SHUFFLE)); 
startActivity(intent); 

上記の趣旨に合致する活動を見つけることはできませんので、私はここに理由があります。エラーメッセージは、アクションとカテゴリを正しく示しています。私が間違っていない限り、上記のマニフェストはインテントフィルタを正しく作成します。

オンラインで検索すると、常にデータも使用されているサンプルが見つかるようです。私は必要があるかどうかを確認するためにデータを追加するだけで大​​騒ぎしましたが、それは問題ではないようです。

少し違う点は、インテント以外のプログラムの流れを制御する方法が違うことですか?私は2つのアクションがあるのは、1つはビューを切り替え、もう1つはビューを切り替えてデータをリフレッシュするので、後でユーザーが画面に切り替えるとすぐにデータをリフレッシュするのではなく、新しいものだけを表示するからです。

答えて

1

私は明示的なインテントを使用できることを知っていますが、私は異なるアクションをしたいので、暗黙のインテントを作成する方が効果的です。

私はむしろそれを疑う。ほとんどの場合、自分のアプリ以外のもの(たとえば、サードパーティのアプリ)をコンポーネントとして起動する場合は、<intent-filter>を使用します。

また、私はそれらのすべてでandroid:launchMode="singleTop"が欲しいと思います。そして、私はあなたが最後の1つにandroid:permission="android.permission.ACCESS_CHECKIN_PROPERTIES"を望んでいないことを非常に確信しています。あなた自身の活動を開始できない可能性が高いからです。

エラーメッセージが正しく動作してカテゴリを述べたと私が間違っている場合を除き、上記のマニフェストには、正しく意図-フィルタを作成します。

Androidアプリケーションで<category>要素の文字列リソースが使用されたことはありませんでした。多分あなたの難しさに貢献しているでしょう。また、<category>の要素は、私が見ることができる(あなたのLAUNCHERを除いて)何か良いことをしていないので、なぜあなたがそこに置くのか不明です。

<intent-filter>要素を削除し、明示的にIntentsを使用することをお勧めします。

0

リソース文字列を使用してインテントアクションを実行しないでください。代わりにandroid.intent.action.VIEWを使用してください。

関連する問題