tags:

views:

57

answers:

1

Hi everybody, Im trying to create my own url scheme so my android app can get called via an URL but for now I dont have a success.

Im trying to have this url to work : cedemo://com.cedemo.scan?X=toto

Here is part of my manifest file :

<activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.GALLERY" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="cedemo" android:host="com.cedemo.scan" />

        </intent-filter>
</activity>

Does anyone can help telling me what is wrong ? Also, if someone find what is wrong, can someone tell me how I read the "X" variable from inside the android code from my app ?

thanks for helping !!


THANK YOU FOR THE FIRST ANSWER. I did the modification of the action and its worked fine. The thing is that I still cannot get the url variable value. Here is the code I tried.

final Intent intent = getIntent();
    final String myScheme=intent.getScheme();
    final Bundle myBundle=intent.getExtras();
    final boolean inContestKey;
    if(myBundle !=null)
        inContestKey=myBundle.containsKey("inContest");
    final Uri myURI=intent.getData();
    final String value;
    if(myURI!=null)
        value = myURI.getQueryParameter("inContest");

But i receiving null from all the functions... what can i do ELSE ?

May be I should explain better the context of my software... 1. My software is started 2. My software launch then the browser 3. the user click a link in the browser and the browser go to the url scheme, back to the software with a variable "X" (for example) 4. the software should read the variable "X"

but in my case : myScheme,myBundle,myURI are set to null value... :(

any ideas ?

+2  A: 

I think the problem is with the Action you defined. There is a "android.intent.action.VIEW" which is what I think you want.

<activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait">
        <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="cedemo" android:host="com.cedemo.scan" />

        </intent-filter>
</activity>

Try that and I bet will resolve correctly. I only made this assumption because you included the browsable category which is usually used by the Browser, which does not know of any of your custom actions. If you do want the GALLERY action as you have implied then just create 2 filters

<activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.GALLERY" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="cedemo" android:host="com.cedemo.scan" />

        </intent-filter>
        <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="cedemo" android:host="com.cedemo.scan" />

        </intent-filter>
</activity>

So within the contents of your activity you can do something like:

// Value should be "toto" as in your example
String value = getData().getQueryParameter("X"); 
Greg
HI, THANK YOU SO MUCH for the infos. I changed the ACTION to action.VIEW and its worked fine. The only thing is that I am not able to catch the url variable "X"... I tried this code :
Fabien
public void onStart(){ super.onStart(); final Intent intent = getIntent(); final String myScheme=intent.getScheme(); final Bundle myBundle=intent.getExtras(); final boolean inContestKey; if(myBundle !=null) inContestKey=myBundle.containsKey("inContest"); final Uri myURI=intent.getData(); final String value; if(myURI!=null) value = myURI.getQueryParameter("X");but everything is receiving NULL value... What can i do ??
Fabien
for better reading, I edited my question.
Fabien
This could be a bunch of things. I think you might be better asking a separate question so that you can display a clearer context. However my assumption is that you have an activity that is started in SingleTop mode and after it is started it sends the user to the browser, and then the browser sends it back. However the getIntent() returns the original Intent that started the activity the first time, since it was just pulled to the front. The old intent that was used didn't have data so all is null. Try overriding onNewIntent(). However like I said, this might be better as a separate question.
Greg