1

この例では、URL (test.com) にアクセスすると、アプリを自動的に起動しようとしています。

ただし、そうするたびに、どのアプリケーションを使用すればよいか尋ねられます。ユーザーの操作を求めずに毎回アプリを起動する方法が必要です。

これを行う方法を調査したところ、次のことがわかりました。

Androidはダイアログを使用して完全なアクションを削除します

しかし、暗黙のインテントではなく明示的なインテントを実装する場合、使用しないため、test.com にアクセスするときにアクティビティを起動するように指定するにはどうすればよいですか?

<data android:scheme="http" android:host="test.com" android:pathPrefix="/" />

IMPLICIT INTENT (正常に動作します - test.com にアクセスするとアプリを起動しますが、ユーザーにアプリを選択するように求めます - これは望ましくありません - プロンプトを使用して完全なアクションなしでアプリを起動する必要があります)

<activity android:name="com.nfc.linked.Warning">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"></action>
        <category android:name="android.intent.category.LAUNCHER"></category>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW"></action>
        <category android:name="android.intent.category.DEFAULT"></category>
        <category android:name="android.intent.category.BROWSABLE"></category>
        <data android:scheme="http" android:host="test.com" android:pathPrefix="/" />
    </intent-filter>
</activity>

明示的な意図 (試行):

public class Warning extends Activity {

    Intent intent = new Intent(this, Warning.class);
    startActivity(intent); 

}
4

1 に答える 1

4

できません。

明示的インテントと呼ばれるものは、正確に1 つのクラスを対象としています。

前に行ったことはintent-filter、マニフェストに を作成することです。これは、 の行に沿って URL に関連するインテントをリッスンしますhttp://*.test.com/*。ただし、HTTP は非常に一般的なプロトコルであり、URI は単なる Web サイトであるため、URL をリッスンするブラウザーなどの他のアプリhttp://*もコンテンツの表示を提案します。このため、Android はチューザーを作成し、ユーザーはそこからアプリを選択する必要があります。

これを回避する唯一の方法は、アプリでセレクターを開くボタンを用意http://test.comし、ユーザーにそれを押して、そのような URL のデフォルト ハンドラーとしてアプリを選択するように依頼することです。悪意のあるアプリがさまざまなアクションのデフォルトとして自身を設定できるため、セキュリティ上の理由からプログラムで実行することはできません。

別のオプションは、Google Play の など、独自の URI スキームを考え出すことmarket://です。あなたのアプリがこれを使用する唯一のアプリになるため、リンクを処理できる唯一のアプリになります。ただし、別の場所 (Web ページ上のリンクや別のアプリからのリンクなど) からアプリを開こうとするすべてのサードパーティが URL スキームに従っていることを確認する必要があります。さらに、ユーザーがサード パーティのリンクのいずれかを押したときにアプリがインストールされていない場合ActivityNotFoundException、ユーザーのデバイスで が発生する可能性があります。

于 2013-03-26T18:31:44.540 に答える