web-dev-qa-db-ja.com

Android Chromeの新しいスキームのインテントにパラメーターを渡すにはどうすればよいですか?

Android iframeインテントを介してchrome 25で次のように動作しない)でネイティブアプリを呼び出すWebアプリがあります。

https://developers.google.com/chrome/mobile/docs/intents

インテントは次のように構成されています。

app:// Requesttype = Testing&Type = 123&tn = 0000000000

新しいintent://スキームでは、app://の後にリストされているパラメーターをネイティブアプリケーションに渡すにはどうすればよいですか?例を見つけることができませんでした。

25
user2418024

新しいスキームでは、引数を追加としてアプリに渡すことができますが、次のようにURIをエンコードする必要があります。

<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.myextra=mystring;end">Do Whatever</a>

これにより、「mystring」という値を持つ「myextra」という追加の文字列が渡されます。 Android Code を見ると、追加のパラメーターをどのようにコーディングする必要があるかがわかります。 「myextra」パラメータの先頭にある「[〜#〜] s [〜#〜]」は、それを文字列として定義します。他のタイプは次のとおりです。

String => 'S'
Boolean =>'B'
Byte => 'b'
Character => 'c'
Double => 'd'
Float => 'f'
Integer => 'i'
Long => 'l'
Short => 's'

たとえば、IntegerとStringの2つの追加パラメーターを渡す場合は、次のようにします。

<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.name=Perico%20de%20los%20Palotes;i.age=35;end">Do Whatever</a>

すべてのパラメーターをURLエンコードする必要があることに注意してください。

Androidアプリでは、これらの追加機能を受け入れる必要があります。アクティビティの "onCreate"イベントで:

Bundle parametros = getIntent().getExtras();
if (extras != null){
    String name = extras.getString("name");
    Integer age = extras.getInt("age");

    if (name!=null && age!=null)
    {
       //do whatever you have to
       //...
    }
}else{
     //no extras, get over it!!
}

そしてもちろん、 this link に示すように、マニフェストにフィルターAndroid.intent.category.BROWSABLEを追加します。

57
ojovirtual

スキームURLの場合:

appname://RequestType/?Type=123&tn=0000000000

次のインテントURLにマップする必要があります。

intent://RequestType/?Type=123&tn=0000000000#Intent;scheme=appname;package=com.example.appname;end
6
AlexD

Iframeとカスタムプロトコルを使用してネイティブアプリを開くことはできなくなりました。

ただし、既存の intent:// syntax を使用して、起動してインテントを送信し、データを渡すことができます。インストールされていない場合は、ユーザーをPlayストアに誘導するという追加の利点があります。

文書化されているように、構文の「パス」部分でデータをエンコードして、intent://play/?a=1#Intent;......;end;または、エクストラとしてエンコードできます。

3
Kinlan

4.4.4以降はインテントが機能しないため、これがアプリに対して実行していることです。

次のインテントフィルターを使用してAndroidManifest.xmlで私のアクティビティを起動するカスタムスキームを作成しました

1)

_ <intent-filter>
  <action Android:name="Android.intent.action.VIEW" />

  <category Android:name="Android.intent.category.DEFAULT" />
  <category Android:name="Android.intent.category.BROWSABLE" />

  <data Android:scheme="<<YOUR UNIQUE SCHEME(I SUGGEST YOUR PACKAGE NAME)"/>
</intent-filter>
_

2)上記で作成したカスタムスキームを介してアプリを開くフォールバックURLを使用してマーケットURLを作成します。

market://details?id=<<your app package from AndroidManifest.xml>>&url=<<your app custom scheme from AndroidManifest.xml>>://yourdomain.com?encoded(p1=v1&p2=v2....etc)

これにより、アプリがインストールされていない場合はストアが開き、アプリが既にインストールされている場合は、デコードされたパラメーターとともにインテントデータでアプリが開きます。

お役に立てれば

3
Sid