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 - #8 by LN

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

I feel like I am one of the utmost users of ODK collect in my country and am very thank-full of this app’s developers. For today I am troubled to program my xlform so that instead of taking photo using the internal camera an external “smart compass” app (that uses mobiles with the necessarily sensors such as the accelerometer and magnetometer) will come and a picture with pitch, roll and compass angle(yaw) readings embedded(excluding my comment by the red ink) will be collected as data; as indicated below. Could someone please advise on this. Thanks in advance for your help.

Hi @Girma_Kassa
you need to find such a hybrid app that would work as a camera as well so we could start it using image widget. Then you could just take a photo. Does the app you are using work like that?

yes it does. In fact there are many compasses and smart compasses with a camera screen and button with the xyz orientation labels vibrating until you take one. This is the compass i want to utilize from the inside of an ODK question.
image

I made a quick investigation and I doubt it's possible to use them as a camera app what is required in order to use them from our image widget, but maybe there is such an app so I would recommend going through all similar apps and testing.
If such an app doesn't exist you will need to first take a photo using that Smart Compass for example and then use our image widget or file widget to attach the photo you made.

1 Like

Thanks brave bro, of course the least we can do is attaching the smart image(call it) from recent photo but it may not be available and thus brouse to where it reside. I said the least b/c this create a little discomfort of starting and running 2 apps and searching an image from where it reside + in the field, it offer extra complexity where you also, for instance, take the direct clean image at some other questions using the default camera.The best to do (our initial inquiry)would have been to let the image widjet provide the choice of existing or pre- planned picture makers such as the compass with GPS and orientations or be constrained to pick the specified/installed compass camera. This would be very important for effective engineering related survey +- questionnaires in such COVID-19 like times where your minimal appearance in the field is vital. Thanks for this alternative though but let us also share our , update, if any.
Some cover pages of complex (>100 Q?n) questionnaires developed and utilized in ODK so far:


for The following projects :1/Redemptive Search of Yekola Abalo(Brucea Disentrea)-National level nitch area identification and land suitability analysis using GIS 2/Assessment of private and public seed producers Geographical locations and potential in central Ethiopia and 3/ Assessment of the risk factors associated with acute and chronic respiratory diseases of chickens, respectively