androidinterprocessandroid-app-links

How to share file from browser to my app and return worked file using app links


I need to create the application which can process the file shared from a browser and to return the result file. The required action I can retreive from the link. But I can't figure out how to get the file content.

I have set up Intent Filters in AndroidManifest.xml:

<activity android:name="activity">
    <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="app"
            android:host="action" />
    </intent-filter>
</activity>

And I've added the processing code in the Activity.

And I've made the following HTML prototype:

        document.getElementById('sendButton').addEventListener('click', function() {
            const fileInput = document.getElementById('fileInput');
            if (fileInput.files.length > 0) {
                const file = fileInput.files[0];
                const url = app://action?operation=sign&filename=${encodeURIComponent(file.name)};
                
              window.location.href = url;
            } else {
                alert('Please select a file first.');
            }
        });

But it doesn't work. When I press the button, nothing happens (in logcat also nothing). But when I check deep link with adb the app wakes up.

I don't fully understand whether it could work or there's another way to get this done. Where to start investigation the problem?


Solution

  • Looks to me like you just need to aexport the activity from the manifest file. Also you should not need to specify a host - try a path instead.

    You are using a private-use URI scheme URL to link to the application. These are often also used to receive OAuth responses in mobile apps. Here is some example syntax to conpare against:

    <activity
        android:name=".oauth.LoginRequestResponseActivity"
        android:exported="true"
        android:launchMode="singleTask"
        android:configChanges="orientation|screenSize">
    
        <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="com.example.demoapp" android:path="/callback" />
        </intent-filter>
    </activity>