1
  • コードでアクティビティのショートカットを作成しましたが、ほとんどのアクティビティは関連するアクティビティを開くことができません。フィルター CREATE_SHORTCUT をアクティビティに追加した場合にのみ機能することがわかりました。なんで?

       <activity
           android:name=".ui.Main"
           android:launchMode="singleTop"
           android:screenOrientation="portrait"
           android:theme="@android:style/Theme.NoTitleBar" >
           <intent-filter>
               <action android:name="android.intent.action.CREATE_SHORTCUT" />
               <category android:name="android.intent.category.DEFAULT" />
           </intent-filter>
       </activity>
    

    (Go Launcher & MIUI 2.3.7でテスト)

  • 以下のログを取得しましたが、MAIN フィルターを追加する必要がありますか?

    09-27 13:34:44.075: E/Launcher(7893): ランチャーにはインテントを起動する権限がありません
    { act=android.intent.action.VIEW
    flg=0x10000000 cmp=/.ui.Activity2 bnds=[349, 76][469,211]}。対応するアクティビティのメイン インテント フィルタを作成するか、このアクティビティにエクスポートされた属性を使用してください。

4

1 に答える 1

6

エラーメッセージが示すように、追加できます

android:exported="true"

あなたの活動に。

Androidのドキュメントを正しく読むと、これがデフォルト値になるはずですが:

アンドロイド:エクスポート

他のアプリケーションのコンポーネントによってアクティビティを起動できるかどうか — 起動できる場合は「true」、起動できない場合は「false」。「false」の場合、アクティビティは、同じアプリケーションのコンポーネントまたは同じユーザー ID を持つアプリケーションによってのみ起動できます。デフォルト値は、アクティビティにインテント フィルタが含まれているかどうかによって異なります。フィルターがないということは、正確なクラス名を指定することによってのみアクティビティを呼び出すことができることを意味します。これは、アクティビティがアプリケーション内部での使用のみを目的としていることを意味します (他のユーザーはクラス名を知らないため)。したがって、この場合、デフォルト値は「false」です。一方、少なくとも 1 つのフィルターが存在するということは、アクティビティが外部での使用を意図していることを意味するため、デフォルト値は "true"です。

たぶん、他の誰かがこれを明確にすることができます。

于 2012-09-27T08:20:09.410 に答える