Редактиране:
След тестване и тестване открих, че ако вашата схема съдържа главни букви, браузърът няма да може да я стартира. Вашата схема трябва да съдържа само малки букви!
Също така имайте предвид, че грешка 459156 на проекта chromium все още не ви позволява да стартирате директно URL адреси, трябва да препратите потребителите към уеб страница, съдържаща този JavaScript код:
<!DOCTYPE html>
<html>
<body>
<script language="javascript">
window.location = 'customscheme://customHost/49FYTJTF00';
</script>
</body>
</html>
Потребителите, попадащи на тази страница, автоматично ще бъдат подканени или с диалогов прозорец за избор на дейност, или директно ще изпратят към вашата дейност.
За да го изпробвате, отворете браузъра на Android, отидете на URL адреса по-долу и копирайте и поставете горния фрагмент в редактора: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_intro
Gif, показващ браузър + JavaScript, отварящ дейността
![Gif](https://i.stack.imgur.com/enYLE.gif)
Оригинален пост
Изпробвах вашия персонализиран URI и той работи на Android 5.0
Но трябва да сте наясно със следните два бъга/проблема:
- Грешка 459156 на проекта Chromium Това основно означава стартиране на персонализирани схеми от браузърът на Android не работи, освен ако URL адресът не е приложен чрез JavaScript. За заобиколно решение вижте тази публикация на StackOverflow: OAuth и персонализираната схема водят до ERR_UNKNOWN_URL_SCHEME в Chrome
- Грешка 80971: URI с персонализирана схема не може да се кликне в SMS текст (Linkify?)
Моят подход
Създадох две отделни дейности, едната като приемник на намерения, а другата като средство за стартиране на намерения. Активността за стартиране има EditText, където може да се въведе пълният URI, и бутон за стартиране на въведения 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);
}
}
Екранна снимка:
![Резултат от изпращане на персонализираното намерение към UriActivity](https://i.stack.imgur.com/HwuPZ.png)
Изтегляне на тестов проект:
Направих изтегляне за проекта, ако не искате опитайте го сами.
person
Rolf ツ
schedule
14.04.2015