このコードを使用して、リンクからアプリを起動しています。
<activity
Android:name="com.example.myApp.myClass"
Android:label="@string/app_name" >
<intent-filter>
<data
Android:Host="customHostName"
Android:scheme="customScheme" />
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.BROWSABLE" />
<category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>
</activity>
これはhrefリンクです。最後にキーを取得します。
customScheme://customHost/49FYTJTF00
以前のすべてのバージョンのAndroidでは問題なく動作しますが、Lollipopでは動作しません。
リンクをクリックすると、起動するブラウザのリストのみが表示されます。
私は何をすべきか?
テストとテストの結果、スキーマに大文字が含まれていると、ブラウザがそれを起動できないことがわかりました。スキームには小文字のみを含める必要があります!
また、chromiumプロジェクトのバグ459156でも、URLを直接起動することはできません。このJavaScriptコードを含むWebページをユーザーに参照する必要があります。
<!DOCTYPE html>
<html>
<body>
<script language="javascript">
window.location = 'customscheme://customHost/49FYTJTF00';
</script>
</body>
</html>
このページにアクセスしたユーザーには、Activity Chooserダイアログが表示されるか、直接アクティビティに送信されます。
試してみるには、Androidブラウザーを開いて以下のURLに移動し、エディターに上記のスニペットをコピーして貼り付けます: http://www.w3schools.com/html /tryit.asp?filename=tryhtml_intro
アクティビティを開くブラウザとJavaScriptを示すGIF
私はカスタムURIを試してみましたが、Android 5.0で動作します
ただし、次の2つのバグ/問題に注意する必要があります。
私は2つの別々のアクティビティを作成しました。1つはインテントレシーバーとして、もう1つはインテントランチャーとしてです。起動アクティビティには、完全なURIを入力できるEditTextと、入力したURIを起動するためのボタンがあります。
Main.Java onClick(起動アクティビティ)
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(input.getText().toString()));
try {
startActivity(intent);
} catch(ActivityNotFoundException e){
Toast.makeText(this, "Auww!! No Activity can open this URI!", Toast.LENGTH_SHORT).show();
}
}
manifest.xml(アクティビティのみ)
<data Android:pathPattern=".*"/>
部分。この部分は重要なので、ホスト以降はすべて有効として受け入れられます。
<activity
Android:name=".Main"
Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.MAIN"/>
<category Android:name="Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
Android:name=".UriActivity"
Android:label="@string/app_name">
<!--
This intent-filter will open any URI with the following forms:
customscheme://customHost/49FYTJTF00
customscheme://customHost
https://www.google.com/something/something
http://www.google.com/
http://google.com/something
-->
<intent-filter>
<data Android:scheme="https"/>
<data Android:scheme="http"/>
<data Android:Host="google.com"/>
<data Android:Host="www.google.com"/>
<data Android:scheme="customscheme"/>
<data Android:Host="customHost"/>
<data Android:pathPattern=".*"/>
<action Android:name="Android.intent.action.VIEW"/>
<category Android:name="Android.intent.category.DEFAULT"/>
<category Android:name="Android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
UriActivity.Java(受信アクティビティ)
public class UriActivity extends ActionBarActivity {
private TextView tvText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_uri);
tvText = (TextView) findViewById(R.id.text);
setTextFromIntent();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setTextFromIntent();
}
private void setTextFromIntent(){
StringBuilder text = new StringBuilder();
Uri data = getIntent().getData();
if(data != null){
text.append("Path:\n");
text.append(data.getPath());
text.append("\n\nScheme:\n");
text.append(data.getScheme());
text.append("\n\nHost:\n");
text.append(data.getHost());
text.append("\n\nPath segments:\n");
text.append(Arrays.toString(data.getPathSegments().toArray()));
} else {
text.append("Uri is null");
}
tvText.setText(text);
}
}
スクリーンショット:
テストプロジェクトのダウンロード:
自分で試したくない場合は、プロジェクトの download を作成しました。
CustomScheme:// customHost/49FYTJTF00へのリンクを使用する代わりに、次のようなリンクを使用してみましたか?
<a href="intent://customHostName/49FYTJTF00#Intent;scheme=customScheme;end">
Chromeはそれをアプリで問題なく開くことができるはずです。同時に、これはすべてのブラウザーで機能するとは限りません。
あなたが書いた:
<data
Android:Host="customHostName"
Android:scheme="customScheme" />
したがって、customScheme://customHostName/49FYTJTF00
の代わりに customScheme://customHost/49FYTJTF00
Googleからアプリを実行する場合は、Chrome another way で実行する必要があります)ことに注意してください。