Как прослушивать пользовательский URI
Я работаю над приложением, у которого есть собственный префикс URI. (dchub://в этом случае)
Поиск по всему и чтение много, но я немного смутился.
Можно ли запустить приложение, когда кто-то нажимает ссылку, начинающуюся с dchub://
в браузере?
До сих пор было много примеров, когда вы открывали браузер из своего приложения, но это не то, что я ищу.
Update
Спасибо большое, я понял, что теперь я немного застрял в следующей части.
Uri data = getIntent().getData();
if (data.equals(null)) { } else {
String scheme = data.getScheme();
String host = data.getHost();
int port = data.getPort();
}
У меня есть nullpointerexception
, если я запускаю приложение нормально, он отлично работает, если я открываю с веб-страницы. Поэтому я подумал, что позволяет включить некоторую проверку на nullvalue, но это не решило проблему. любые предложения, как я могу запустить приложение, просто выбрав его?
Ответы
Ответ 1
Чтобы зарегистрировать протокол в своем приложении для Android, добавьте дополнительный блок в AndroidManifest.xml.
<manifest>
<application>
<activity>
<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="dchub"/>
</intent-filter>
</activity>
</application>
</manifest>
Ответ 2
Не используйте data.equals(null). Это связано с ошибкой, вы не можете вызывать методы для нулевого объекта, следовательно, NPE.
Почему блок кода emtpy? На мой взгляд, это намного красивее:
if(data != null){
// code here
}
Ответ 3
Попробуйте этот код:
try {
Uri data = getIntent().getData();
if (data.equals(null)) {
} else {
String scheme = data.getScheme();
String host = data.getHost();
int port = data.getPort();
//type what u want
tv.setText("any thing");
}
} catch (NullPointerException e) {
// TODO: handle exception
tv.setText("Null");
}