2013-05-24 12 views
21

私は、次に従って、クロム25では動作しませんiframeの意図を経由してAndroid上でネイティブアプリを呼び出すWebアプリケーションを持っている....chromeの新しいスキームでandroid Intentにパラメータを渡すにはどうすればいいですか?

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

意図は以下のように構造化されました。.. ..

アプリ:私はアプリの後にリストされたパラメータを渡して行くだろうか//スキーム://ネイティブへの新しい意思で= 123 & TN = 0000000000

// Requesttype =テスト&タイプ応用?私は例を見つけることができませんでした。

+0

明らかにドキュメントには何かがありませんが、ソースへのリンクには何らかの説明が含まれています。明らかにhttps://code.google.com/p/android-source-browsing/source/browse/core/java/android/content/Intent.java?repo=platform--frameworks--base#6591のタイプについてです、ドット、キー、 '='、値、およびセミコロン(&ではなく)のドキュメントにある – njzk2

+0

@ njzk2は、パスセクションにあります。 – Kinlan

答えて

2

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

ただし、既存のintent:// syntaxを使用してデータを起動し、そのデータを渡しても、インストールされていない場合はユーザーをPlayストアに連れて行くことができます。

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

+0

ドキュメントのパス構文に関連する部分が見つかりません。見つかったすべての詳細は、3720行目のソースにあります。詳細なドキュメントはどこにありますか? – njzk2

+0

"HOST/URI-path // Optional host"と言うと、これはデータが通過する場所です。 – Kinlan

+0

@ njzk2私たちがそれを明確にすることができるなら、私はドキュメントを更新します。 – Kinlan

5

:あなたはの意図URLにマッピングしたい

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

:新しいスキームで

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

他のタイプへのリンクはどこですか? –

+0

タイプは実際にはここでは関係ありません。私は正しい答えを更新しました。 – AlexD

+0

アプリがインストールされていない場合、プレイストアを参照するにはどうすればよいですか? –

46

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

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

これは値「のMyString」と「myextra」と呼ばれる余分な文字列を渡します。 Android Codeを見ると、余分なパラメータをどのようにコード化する必要があるかがわかります。 "S"は、 "myextra"パラメータの先頭に文字列として定義します。他のタイプは、することができます。たとえば

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

、我々は2つの追加のパラメータを渡す場合、整数や文字列は、我々はこれを行うことができます:あなたがURLする必要があります

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

注意-encodeすべてのパラメータ。

あなたの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フィルタを追加します。

+2

ありがとうございました!これは、私が意図したuriに追加情報を追加する方法について見た最初の良い説明です。 –

+1

ありがとうございました。いくつかの追加の注記: 'intent:#Intent; ...; end'を使うだけで、'何でも 'の必要はありません。インテントフィルタには、アクティビティに 'BROWSABLE'と' DEFAULT'カテゴリが必要です。 'component ='は実際には無視されます。パッケージを指定するには 'package ='を使います。 – domen

+0

これはOEMブラウザでは動作しません。 – Sid

3

インテントは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)

これはあなたのアプリがインストールされていない場合は店を開き、アプリが既にデコードされたパラメータを使用して、インストールされている場合、意図データとアプリを開きます。

希望します。

関連する問題