2013-04-21 19 views
13

Ich weiß nicht, ob viele Leute dies versucht haben, aber ich versuche eine App zu bauen, die Benutzer auf einen Link auf der SMS tippen muss er/sie erhält und dies wird Starten Sie die Android-App. Ist es möglich, in Android zu tun? Wenn ja, wie kann ich das tun? Ich weiß, dass dies in IOS getan werden kann. Irgendwelche Vorschläge oder Hilfe werden geschätzt. Danke.Starten Sie Android-App, wenn ein Link auf SMS angeklickt wird

Antwort

14

In Ihrem Manifest unter einer Aktivität, die Sie eingehende Daten von einem Link geklickt in der Messaging-Anwendung behandeln wollen, so etwas wie folgt definieren:

<activity android:name=".SomeActivityName" > 

    <intent-filter> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <action android:name="android.intent.action.VIEW" /> 
     <data android:scheme="com.your_package.something" /> 
    </intent-filter> 

</activity> 

Die hier android:scheme="" ist, was gewährleistet, dass die Aktivität wird reagieren mit dieser auf alle Daten darin:

<data android:scheme="com.your_package.something" /> 

im SomeActivityName können Sie eine che laufen (Namen als Illustration verwendet Natürlich werden Sie Ihre eigenen :-) verwenden.) ck wie folgt aus:

Uri data = getIntent().getData(); 
String strData = data.toString(); 
if (strScreenName.equals("com.your_package.something://")) { 
    // THIS IS OPTIONAL IN CASE YOU NEED TO VERIFY. THE ACTUAL USAGE IN MY APP IS BELOW THIS BLOCK 
} 

ähnliche Nutzung Meine App:

Uri data = getIntent().getData(); 
strScreenName = data.toString() 
     .replaceAll("com.some_thing.profile://", "") 
     .replaceAll("@", ""); 

ich diese verwenden Klicks auf Twitter @username Links innerhalb meiner app zu behandeln. Ich muss die com.some_thing.profile:// und die @ ausziehen, um den Benutzernamen für die weitere Verarbeitung zu erhalten. Der Manifest-Code ist genau derselbe (mit nur den name und scheme geänderten).

+0

ok, wenn ich eine Meldung erhalten, (zum Beispiel: myapp: // get/256298xxxx) Es soll den Teil myapp: // get/256298xxxx für den Text markieren. Aber das tut es nicht. Wie soll ich dieses Problem angehen? Wie wird die App gestartet, wenn das Teil myapp: // get/256298xxxx nicht selbst als Link markiert wird, um im Text zu drücken – nishantvodoo

+0

@nishan_vodoo: Das ist, weil _myapp: // get/256298xxxx_ ist keine gültige URL für Die SMS-App analysiert es und zeigt es als Link an. Im besten Fall wird die Nummernfolge als Telefonnummer analysiert. Sie müssen eine gültige URL in der SMS senden. Werfen Sie einen Blick auf ein bestimmtes Beispiel: http://StackOverflow.com/a/3865145/450534. –

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, auf meine Frage zu antworten. – nishantvodoo

5

Fügen Sie Ihrer App eine intent-filter hinzu, die nach Links in dem Format sucht, in dem Ihre App gestartet werden soll.

Dies ist jedoch ein globaler Listener, und jeder Link, der dem Format auch außerhalb der SMS-App entspricht, löst Ihre App aus. Wenn der Nutzer also im Webbrowser auf einen ähnlichen Link klickt, versucht Ihre App, darauf zu antworten.

Darüber hinaus, wenn es eine andere App neben Ihrem gibt, die mit diesem Link umgehen kann, erstellt Android eine Auswahl, die es dem Benutzer ermöglicht, die App auszuwählen, die sie verwenden möchten. Sie können nichts dagegen tun, außer dass der Benutzer Ihre App zum Standard-Handler für solche Links macht.

0
<intent-filter> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.BROWSABLE" 
     <data android:scheme="https" android:host="${hostName}" android:pathPattern="/.*" /> 
    </intent-filter> 

Vorherige Antworten sind OK, aber vergessen Sie nicht, das Muster anzugeben.

See more details here.

auch Ihre Hostnamen innerhalb Gradle definiert Datei wie:

android { 
    defaultConfig { 
     manifestPlaceholders = [hostName:"subdomain.example.com"] 
    } 
} 

Mehr Infos über manifestPlaceholdershere.