Launching External app from ODK Collect - "requested application is missing"

Hello everyone
1. What is the problem? Be very detailed.
I started some days ago to create some forms (in Excel) to collect geological data on the field.
I succeed to create basic forms. But I wanted to create a form that:
a- geolocalized the user (with geopoint). OK
b- Simply launch an app that can measure azimuth and dip value (the app name is "Clino"). I do not try to retrieve data from this app, but simply open it, take measurement and close it
For this purpose I read the documentation and simply add to my form in the apperance field: "ex:com..mve.fieldmove.clino"
When I try the form, I have the following message "requested application is missing etc."
I do not really understand what I have missed.
I tried the example from the documentation: "ex:org.opendatakit.counter" and it was working

2. What app or server are you using and on what device and operating system? Include version numbers.
ODK collect 1.22.1 on a Samsung S7 running android 8.0.0
3. What you have you tried to fix the problem?
Read carefully the documentation. Try some other app but without success
4. What steps can we take to reproduce the problem?
Download the app and make a simple form

5. Anything else we should know or have? If you have a test form or screenshots or logs, attach below.
I am sorry, but when I try to paste the XML file, it is truncated ...

Welcome to the forum, @Julien!

I think your package name is probably incorrect. It should be com.mve.fieldmove.clino and what you typed has an extra period.

If that still doesn't work, can you upload/attach the XLSForm?

Thanks for you answer.
The package name was good in the .xml file. It was a typing mistake, sorry.
I uploaded the file below.

Structural_measurement.xml (1.5 KB)

Thanks for your help

I experiment some issue too :slight_smile:
Launch a scanner app and attach a PDF from Collect

Thanks for the link.
I saw that the issue was coming from the "external" app.
Did you manage to find a workaround to your issue ?

Non I did'nt find any issue for printing
But I manage to partially use a other app ( to generate qr code)
I do not understand in which case it works

@Julien
The app you are trying to use is FieldMove Clino
is there any documentation that shows you can do that (that you can start the app from another app)? I'm asking because I can't see anything.

If an app allows starting one of its activities from an external app it has to add intent filter in its manifest file. Look how it is done in ODK Counter: https://github.com/opendatakit/counter/blob/master/app/src/main/AndroidManifest.xml#L18

I decompiled the app you tried to use and its manifest file looks like:

    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
    <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true"/>
    <uses-feature android:name="android.hardware.sensor.compass" android:required="true"/>
    <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
    <uses-feature android:name="android.hardware.location" android:required="false"/>
    <uses-feature android:name="android.hardware.screen.portrait"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.android.vending.BILLING"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <permission android:name="com.mve.fieldmove.clino.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
    <uses-permission android:name="com.mve.fieldmove.clino.permission.MAPS_RECEIVE"/>
    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/launcher_text" android:theme="@style/NoActionBarTitle">
        <activity android:hardwareAccelerated="true" android:label="@string/launcher_text" android:name="com.mve.fieldmove.clino.activities.HomeActivity" android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name="com.mve.fieldmove.clino.activities.EditUnitListActivity" android:screenOrientation="portrait"/>
        <activity android:name="com.mve.fieldmove.clino.activities.EditActivity" android:screenOrientation="portrait"/>
        <activity android:name="com.mve.fieldmove.clino.activities.ProjectListActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"/>
        <activity android:name="com.mve.fieldmove.clino.activities.HelpActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
        <activity android:name="com.mve.fieldmove.clino.activities.AppSettingsActivity" android:screenOrientation="portrait"/>
        <activity android:name="com.mve.fieldmove.clino.activities.PurchaseActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"/>
        <activity android:name="com.mve.fieldmove.clino.activities.InterstitialAdActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.Light.NoActionBar"/>
        <activity android:name="com.mve.fieldmove.clino.activities.ImportProjectActivity" android:screenOrientation="portrait"/>
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDk4TB18VxtPRAmshtu7Ghvbi_OcNCr63I"/>
    </application>
</manifest>

so looks as if they just don't allow to use their app in the way you want to do that.

1 Like

Thanks for the explanation.
I suspected this kind of issue. But I do not have sufficient knowledge in the Android world to prove my point ...
I'm glad it was not a bug from ODK Collect.
In the meantime, I found a workaround. I will create a form that explain the "HowTo" collect structural data and upload the file with ODK Collect.
Thanks again for the Android course. I will be carefull next time.
And thanks to all the developer of this amazing app !

Have a good day.

No problem!
Yeah that's not easy and requires some knowledge so don't hesitate to ask.

1 Like