2013-08-07 10 views
16

Przeszukałem większość niestandardowego schematu URL Q & A i nie znalazłem mojej możliwej odpowiedzi.Android, jak utworzyć niestandardowy schemat URL z podanym formatem myapp: // http: //

Chcę, aby moja aplikacja została uruchomiona poprzez kliknięcie na określony adres URL w przeglądarce (dowolny na urządzeniu mobilnym), chodzi o to, że podanego adresu URL nie można zmodyfikować, ponieważ służy on również do obsługi aplikacji na iOS i wygląda tak:

„MojaApl: // http://www.name.com/path/path2/

nie jestem pewien, jak obsługiwać „MojaApl: // http: //” i skonstruować odpowiedni filtr intencji, i wszystko próbowałem nie działa. Każda pomoc zostanie doceniona, a jeśli pominąłem odpowiednią odpowiedź, proszę, oprócz moich przeprosin.

To, co starałem dotąd:

 <activity 
     android:name="com.myapp.test.SplashScreen" 
     android:exported="true" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     <!-- Test for URL scheme --> 
     <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:host="www.name.com" 
       android:path="/path/path2/" 
       android:scheme="http" /> 
      <data 
       android:host="www.name.com" 
       android:path="/path/path2/" 
       android:scheme="https" /> 

      <data android:scheme="myapp" /> 
     </intent-filter> 
     <!-- End Test for URL scheme --> 
    </activity> 

Uwaga: Próbowałem z/bez eksportowany: true

+2

Ponieważ to nie jest ważne 'struktura Uri', bardzo wątpię, że będzie działać. Łatwiej będzie zmienić aplikację na iOS, aby używać czegoś, co jest prawidłowym identyfikatorem URI. – CommonsWare

+0

@CommonsWare Hej, dzięki za komentarz. Ten rodzaj identyfikatora URI działa w aplikacji IOS. Udaje im się otworzyć aplikację, klikając ten link. Czy uważasz, że może istnieć tylko jeden schemat, taki jak "myapp: //" LUB "http: //"? – EviatarS

+1

"Czy sądzisz, że może istnieć tylko jeden schemat, taki jak" myapp: // "LUB" http: // "?" -- tak. W najlepszym przypadku, jeśli masz szczęście, 'http: //' będzie traktowany jako host. W najgorszym przypadku 'Uri' po prostu nie przejdzie analizy. I mogę wymyślić kilka innych opcji. W "Uri" jest absolutnie tylko jeden schemat - klasa "Uri" nie pozwala na więcej niż jeden. – CommonsWare

Odpowiedz

11

Jak CommonsWare że dany URI po musiałem utworzyć schemat nie jest prawidłowym identyfikatorem URI, więc schemat nie zadziałał, a aplikacja nie uruchomiła się. Po tym wyjaśnieniu faceci po stronie serwera byli przekonani do zmiany URI na myapp: // ... i działało jak magia :).

Activity wygląda to teraz:

<activity 
    android:name="com.myapp.test.SplashScreen" 
    android:exported="true" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait" 
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 

    <!-- Test for URL scheme --> 
    <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="myapp" /> 
    </intent-filter> 
    <!-- End Test for URL scheme --> 
</activity> 
+0

Wydaje się, że proces jest prosty, jednak nie działa ze mną –

+0

@MazenKasser hej, jak wygląda Twój system? może pomogę, jeśli opublikujesz tutaj – EviatarS

+0

dziękuję, działałem, ponieważ nie próbowałem pełnego formatu "myapp: //moja_domena.com/" i odkryłem, że nie wszystkie aplikacje czytnika kodów QR lub mobilne przeglądarki internetowe czy DeepLinking ... –

1

to nadużycie schematu URI i jest nieważna. Adres URL HTTP, który chcesz przekazać, jest fragmentem danych i dlatego powinien zostać wysłany w ciągu zapytania.

myapp://somehost/action?url=http%3A%2F%2Fwww.name.com%2Fpath%2Fpath2%2F 
+0

Stwierdził, że jego 'dany adres URL nie może być modyfikowany, ponieważ służy on również do obsługi aplikacji na iOS' – Bobby

+0

Już to zmodyfikował. – Monstieur

-1

potrzebujesz użyć hiperłącza, aby uruchomić aplikację. na przykład, możesz ustawić schemat = "nazwa twojego pakietu", musisz ustawić hiperłącze w ten sposób: nazwa twojego hosta: // host, i powinieneś odwiedzić hiperłącze na swojej ulubionej przeglądarce. Jeśli nie masz etykiety hosta, po prostu ją usuń.

<!-- Test for URL scheme --> 
<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:host="host" android:scheme="yourpackagename" /> 
</intent-filter> 
<!-- End Test for URL scheme --> 

Jeśli działalność ma więcej niż jeden program, należy użyć 2 lub więcej, aby określić to

+0

'android: host =" "' powoduje błąd: "android: host nie może być pusty" –

+0

dzięki za komentarz, w studio po prostu usuń ten kod // android: host = "" jeśli nie potrzebujesz "hosta" – Yachao

Powiązane problemy