

複数の暗黙的インテントに対応したアクティビティを起動したいケースがありますが、 指定したIntentの発行では起動できずこまっております。

起動したいアプリ(アクティビティ)のAndroid Manifest.xmlを以下のように設定されています。

[code]

    <activity
        android:name="com.sample.testapp.MainActivity"
        android:exported="true"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
    
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
    
            <data
                android:scheme=“testapp" />
            <data
                android:host=“hoge"
                android:pathPrefix=“/fuga"
                android:scheme="https" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
     </activity>
    
[/code]

上記のとおり”http”とカスタムスキーム”testapp"の2つのdataタグを設定されているのですが、
この時、”testapp”のスキームが反応しません。

> adb shell am start -a android.intent.action.VIEW -d "testapp:”

起動のIntentは上記のように指定しております。

> Starting: Intent { act=android.intent.action.VIEW dat=testapp: } Error:
> Activity not started, unable to resolve Intent {
> act=android.intent.action.VIEW >dat=testapp: flg=0x10000000 }

エラーは上記のようになっております。

このようなfilterを実装をしているActivityに対しては、どのような方法でアクティビティを呼び出すのが正しいのでしょうか？
有効な手段をご存じの方がいらっしゃいましたら教えて下さい。


CC BY-SA 3.0
2014-12-08T11:50:05.813
457
2014-12-09T03:42:03.453
944
question
android
一つのIntent-filterに対して複数のdataタグが指定されたActivityの呼び出しについて


[本家SO](https://stackoverflow.com/questions/22220785/error-starting-an-
activity)に似たような質問と回答がありました。

`<intent-filter>` を分けてみてはどうでしょうか。

[code]

    <activity
      android:name="com.sample.testapp.MainActivity"
    
      android:exported="true"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
    
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    
        <data
          android:scheme="testapp" />
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
    
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    
        <data
          android:host="hoge"
          android:pathPrefix="/fuga"
          android:scheme="https" />
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    
[/code]


CC BY-SA 3.0
2014-12-08T12:22:23.207
458
2014-12-08T12:29:34.390
2017-05-23T12:38:55.250
-1
724
457
answer


intent-filterにおけるdataの扱いに誤解がありそうです。 1つのintent-
filter内に複数のdata要素がある、このサンプルコードの場合、

[code]

    <intent-filter>
        ...省略...
        <data
            android:scheme="testapp" />
        <data
            android:host="hoge"
            android:pathPrefix="/fuga"
            android:scheme="https" />
    </intent-filter>
    
[/code]

一見すると、data要素ごとにOR指定のように読めますが、 実際の動作は「scheme属性はtestappまたはhttpsを指定 AND
host属性はhoge AND pathPrefix属性は/fugaである」です。サンプルコードでActivityを呼び出す場合には、

`adb shell am start -a android.intent.action.VIEW -d "testapp://hoge/fuga"`

または

`adb shell am start -a android.intent.action.VIEW -d "https://hoge/fuga"`

で起動できます。

data要素の詳細は <http://developer.android.com/guide/topics/manifest/data-
element.html> が詳しいです。


CC BY-SA 3.0
2014-12-09T03:42:03.453
473
2014-12-09T03:42:03.453
395
457
answer