web-dev-qa-db-ja.com

Android OS?

だから私はAndroidアプリを作成したいので、Android OSのどこかに登録されます(または単にシステムの起動時に起動します)そして電話ユーザーがクリックしたときにウェブブラウザ内のウェブページ上の特別なボタン:

 <a href="myapp://mysettings">Foo</a> 

私のアプリはポップアップし、そのURLで送信されたパラメーターを使用して実行されます。

それで、どうすればそのようなことをするのですか?

コード付きのチュートリアルが必要です!

52
Rella

W3Cなどを介してURIの標準ルールに従う必要があります。これは基本的に、これを行わないことを意味します。

Androidは、汎用インテントを記述するためのUri構文を定義しています。この表現との間で変換を行うためのIntentのメソッドは次のとおりです。 http://developer.Android.com/reference/Android/content/Intent.html#toUri(int)

そのため、通常の機能を使用して、特定のコンポーネントで処理するインテントの種類のマニフェストを記述し、特に独自のネームスペース(com.mycompany.myapp.action)でアクション名を定義します.DO_SOMETHINGまたはその他)。次に、コンポーネントに一致するIntentを作成し、Intent.toUri()を使用してこれのURI表現を取得できます。これはリンクに配置でき、押されたときにアプリを処理するためにアプリを見つけます。このようにブラウザから起動するには、コンポーネントがBROWSABLEカテゴリを処理する必要があることに注意してください。 (リンクに配置するインテントにこれを含める必要はありません。ブラウザはこれを自動的に追加します。)

最後に、次のようにインテントのパッケージをアプリに設定できます: http://developer.Android.com/reference/Android/content/Intent.html#setPackage(Java.lang.String)

これはプラットフォームの新しい機能であり、他のアプリケーションがそれらをインターセプトして処理できないように、リンクインテントを自分のアプリのみに向けることができます。

要約すると、インテントとインテントフィルターに関する通常のドキュメント(コンテンツを使用しないNotePadチュートリアルなど)を読んでください:ここでのURI、おそらく単なるカスタムアクション)、アプリをそのように動作させます。次に、インテントフィルターがBROWSABLEカテゴリを処理する場合、同じ方法でブラウザーリンクを作成してアプリを起動できます。

48
hackbod

まず、ブラウザ/メールでカスタムスキーム「myapp」を使用してリンクからアプリを起動できるようにするには、次のようにインテントフィルターを設定します。

<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="myapp"/> 
</intent-filter>

リンク内のクエリを解析するにはmyapp:// someaction /?var = str&varr = string
(コードは非常に単純化されており、エラーチェックはありません。)

Intent intent = getIntent();
// check if this intent is started via custom scheme link
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
  Uri uri = intent.getData();
  // may be some test here with your custom uri
  String var = uri.getQueryParameter("var"); // "str" is set
  String varr = uri.getQueryParameter("varr"); // "string" is set
}

[編集]カスタムスキームを使用してアプリを起動する場合、問題の1つは、別のアプリのWebViewがカスタムスキームを理解できない可能性があることです。これにより、カスタムスキームのリンクについて、これらのブラウザーの404ページが表示される可能性があります。

55
9re

チェイスの貢献に対する私のカットです。

次のように、マニフェストに読み込むアクティビティにインテントフィルターを作成します。

<intent-filter>
    <action Android:name="com.bubblebeats.MY_CUSTOM_ACTION" />
    <category Android:name="Android.intent.category.DEFAULT"/>
    <category Android:name="Android.intent.category.BROWSABLE"/>
</intent-filter>

このためのWebページのURLは次のようになります。

intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;end

ブラウザからapkを起動するための最も基本的なHTMLコードは次のようになります。

<body>
    <a href="intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;end">click to load apk</a>
</body>

インテントに変数を追加するには

Android次のようなコード内からURIを生成できます。

Intent i = new Intent();

i.setAction("com.bubblebeats.MY_CUSTOM_ACTION");
i.putExtra("some_variable", "123456");

Log.d("ezpz", i.toUri(Intent.URI_INTENT_SCHEME));

これはこれを生成します:

04-13 09:47:30.742: DEBUG/ezpz(9098): intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end

あなたはこの部分が欲しいだけです:

intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end

ここで何が発生したかをよく見てください。コードステップをスキップして、これらのURIを自分で手動で作成する方法を確認できます。

特にこの部分:

S.some_variable=123456
43
Jason Van Anden

Hackbodがコード例を提供したことはないので、これを機能させてから、共有したいだけです。

まず、マニフェストファイルでカスタムアクションを定義する必要があります。

<activity
    Android:name=".activity.MainActivity"
    Android:label="@string/app_name_full">
    <intent-filter>
        <action Android:name="com.yourpackage.action.OPEN_VIEW"></action>
        <category Android:name="Android.intent.category.DEFAULT"></category>
        <category Android:name="Android.intent.category.BROWSABLE"></category>
    </intent-filter>
</activity>

次に、Webサイトのコンテンツについて、インテントからURIを生成する必要があります。アクティビティに次のコードを追加します(リンクが生成されたら、このコードを削除できます)。

Intent i = new Intent();
        i.setAction("com.yourpackage.action.OPEN_VIEW");
        i.setPackage("com.yourpackage");
        i.putExtra("myextra","anystring");
        Log.d(getClass().getSimpleName(), i.toUri(Intent.URI_INTENT_SCHEME));

Extrasを受け取るには、アクティビティに以下を追加します。これにより、カスタムアクション(マニフェストで定義されている)を受信できます。

final Intent intent = getIntent();
final String action = intent.getAction();

        if ("com.yourpackage.action.OPEN_VIEW".equals(action)) {
           Log.i(getClass().getSimpleName(), "EXTRA: "+intent.getExtras().getString("myextra"));
        }

あなたのウェブサイト(これは以前に生成されたリンクです):

<a href="intent:#Intent;action=com.yourpackage.action.OPEN_VIEW;package=com.yourpackage;S.myextra=anystring;end">Open App with extra</a>

誰かがより良い理解のために役立つことを願っています。何かおかしくなったら訂正してください。

9
AlbAtNf