Подтвердить что ты не робот

Как прослушивать пользовательский 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, но это не решило проблему. любые предложения, как я могу запустить приложение, просто выбрав его?

4b9b3361

Ответ 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");
}