Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Multiple instances of android application
Forum Updated to NodeBB v4.3 + New Features

Multiple instances of android application

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
5 Posts 3 Posters 492 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H Offline
    H Offline
    hexo
    wrote on 23 Sept 2023, 11:40 last edited by
    #1

    I am trying to write an android application that opens PDF files (that is, it responds to PDF viewing intents). However, when I open the application while another instance is already open by clicking on a PDF file, the application crashes. It appears that the android version of Qt is not capable of handling multiple instances?
    Here is a minimal reproducible code sample:

    main.cpp file:

    
    #include <QApplication>
    #include <QPushButton>
    
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget container;
        QPushButton button("Click me", &container);
        container.show();
        return a.exec();
    }
    

    AndroidManifest.xml file. This is the same as the default autogenerated manifest file by qt, except the intent-filters for PDF files:

    <?xml version="1.0"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="org.qtproject.example"
        android:installLocation="auto"
        android:versionCode="-- %%INSERT_VERSION_CODE%% --"
        android:versionName="-- %%INSERT_VERSION_NAME%% --">
        <!-- %%INSERT_PERMISSIONS -->
        <!-- %%INSERT_FEATURES -->
        <supports-screens
            android:anyDensity="true"
            android:largeScreens="true"
            android:normalScreens="true"
            android:smallScreens="true" />
        <application
            android:name="org.qtproject.qt.android.bindings.QtApplication"
            android:hardwareAccelerated="true"
            android:label="-- %%INSERT_APP_NAME%% --"
            android:requestLegacyExternalStorage="true"
            android:allowNativeHeapPointerTagging="false"
            android:allowBackup="true"
            android:fullBackupOnly="false">
            <activity
                android:name="org.qtproject.qt.android.bindings.QtActivity"
                android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
                android:label="-- %%INSERT_APP_NAME%% --"
                android:launchMode="singleTop"
                android:screenOrientation="unspecified"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    
                <intent-filter >
                    <action android:name="android.intent.action.OPEN_DOCUMENT" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <data android:mimeType="application/pdf" />
                </intent-filter>
                <intent-filter >
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <data android:mimeType="application/pdf" />
                </intent-filter>
    
              <meta-data
                    android:name="android.app.lib_name"
                    android:value="-- %%INSERT_APP_LIB_NAME%% --" />
    
              <meta-data
                    android:name="android.app.arguments"
                    android:value="-- %%INSERT_APP_ARGUMENTS%% --" />
    
                <meta-data
                    android:name="android.app.extract_android_style"
                    android:value="minimal" />
            </activity>
        </application>
    </manifest>
    
    

    If you open the app and then try to open another instance by clicking on a PDF file, it freezes and the only way to open it again is to close it from system menu. This blog post suggests setting android:launchMode:"singleInstance" in the manifest file, but it is only a partial solution, because even with that when opening a PDF file from another application (e.g. google drive or telegram) still a new version of the application is created and it still crashes.

    1 Reply Last reply
    0
    • H Offline
      H Offline
      hexo
      wrote on 29 Sept 2023, 06:55 last edited by
      #2

      Should I open a feature request for this? Even the author of the previous blog mentions this in the next part of the series here:

      If the App was open, onNewIntent() from our customized Activity should be called, but Google Docs always calls onCreate() - doesn‘t matter if the Target App is already running or not. Then a white screen comes up, the App hangs and must be closed. The Debug Log reports:

      E Qt JAVA : Surface 2 not found!

      I haven‘t found a way to workaround this yet - perhaps anyone else has an idea HowTo fix ?

      That blog post was from 2018! I find it very surprising that there doesn't seem to be any discussion on this issue on the web. It seems like a pretty huge problem. Am I doing something wrong maybe?

      J 1 Reply Last reply 29 Sept 2023, 14:47
      0
      • H hexo
        29 Sept 2023, 06:55

        Should I open a feature request for this? Even the author of the previous blog mentions this in the next part of the series here:

        If the App was open, onNewIntent() from our customized Activity should be called, but Google Docs always calls onCreate() - doesn‘t matter if the Target App is already running or not. Then a white screen comes up, the App hangs and must be closed. The Debug Log reports:

        E Qt JAVA : Surface 2 not found!

        I haven‘t found a way to workaround this yet - perhaps anyone else has an idea HowTo fix ?

        That blog post was from 2018! I find it very surprising that there doesn't seem to be any discussion on this issue on the web. It seems like a pretty huge problem. Am I doing something wrong maybe?

        J Offline
        J Offline
        JoeCFD
        wrote on 29 Sept 2023, 14:47 last edited by JoeCFD
        #3

        @hexo I have a small test program with poppler on Ubuntu.
        it works like the following:

            auto new_document = Poppler::Document::load( file_name );
            if ( nullptr == new_document ) { /* check open is ok first */
                std::cout << " can not open pdf file " << qPrintable( file_name ) <<std::endl;
                return;
            }
            closeDocument();  /* close it for other apps  */
        
           //use new_document
        

        no crash.

        H 1 Reply Last reply 29 Sept 2023, 15:28
        0
        • J JoeCFD
          29 Sept 2023, 14:47

          @hexo I have a small test program with poppler on Ubuntu.
          it works like the following:

              auto new_document = Poppler::Document::load( file_name );
              if ( nullptr == new_document ) { /* check open is ok first */
                  std::cout << " can not open pdf file " << qPrintable( file_name ) <<std::endl;
                  return;
              }
              closeDocument();  /* close it for other apps  */
          
             //use new_document
          

          no crash.

          H Offline
          H Offline
          hexo
          wrote on 29 Sept 2023, 15:28 last edited by
          #4

          @JoeCFD This issue is specific to android. My application already works on linux/mac/windows with no problem.

          1 Reply Last reply
          0
          • A Offline
            A Offline
            Aliciasmith
            wrote on 2 Oct 2023, 13:51 last edited by Aliciasmith 10 Feb 2023, 13:51
            #5
            This post is deleted!
            1 Reply Last reply
            0

            1/5

            23 Sept 2023, 11:40

            • Login

            • Login or register to search.
            1 out of 5
            • First post
              1/5
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved