Android启动应用程序,使用方案和二维码创建多个实例

Android启动应用程序,使用方案和二维码创建多个实例,android,qr-code,Android,Qr Code,我正试图让一个定制的安卓系统工作,这样每当扫描二维码时,它就会启动我的应用程序。我已经把这些都做好了,但问题是,它似乎启动了一个在QR扫描程序下运行的程序的新实例(我用同样的结果尝试了QR阅读器和Google Goggles)。我不知道有什么方法可以让它跳转到正在运行的程序,而不是启动一个新实例 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />

我正试图让一个定制的安卓系统工作,这样每当扫描二维码时,它就会启动我的应用程序。我已经把这些都做好了,但问题是,它似乎启动了一个在QR扫描程序下运行的程序的新实例(我用同样的结果尝试了QR阅读器和Google Goggles)。我不知道有什么方法可以让它跳转到正在运行的程序,而不是启动一个新实例

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".QRActivity"
            android:label="This is my QR Screen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" >
                </action>

                <category android:name="android.intent.category.DEFAULT" >
                </category>

                <data android:scheme="testqr" >
                </data>
            </intent-filter>
        </activity>
    </application>

</manifest>
这是我的密码。我有两个屏幕(默认的activity_main和一个名为activity_qr的新屏幕,当testqr://test 从QR读取器调用

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".QRActivity"
            android:label="This is my QR Screen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" >
                </action>

                <category android:name="android.intent.category.DEFAULT" >
                </category>

                <data android:scheme="testqr" >
                </data>
            </intent-filter>
        </activity>
    </application>

</manifest>
这是我的舱单:

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".QRActivity"
            android:label="This is my QR Screen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" >
                </action>

                <category android:name="android.intent.category.DEFAULT" >
                </category>

                <data android:scheme="testqr" >
                </data>
            </intent-filter>
        </activity>
    </application>

</manifest>

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".QRActivity"
            android:label="This is my QR Screen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" >
                </action>

                <category android:name="android.intent.category.DEFAULT" >
                </category>

                <data android:scheme="testqr" >
                </data>
            </intent-filter>
        </activity>
    </application>

</manifest>

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".QRActivity"
            android:label="This is my QR Screen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" >
                </action>

                <category android:name="android.intent.category.DEFAULT" >
                </category>

                <data android:scheme="testqr" >
                </data>
            </intent-filter>
        </activity>
    </application>

</manifest>
这只是Android上QR扫描仪的特点,还是有一种方法可以让QR运行已经运行的实例,而不是在QR程序下面启动一个新实例。谢谢

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".QRActivity"
            android:label="This is my QR Screen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" >
                </action>

                <category android:name="android.intent.category.DEFAULT" >
                </category>

                <data android:scheme="testqr" >
                </data>
            </intent-filter>
        </activity>
    </application>

</manifest>
编辑:根据要求,这里有一个“期望的程序流程”概述 所需程序流

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".QRActivity"
            android:label="This is my QR Screen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" >
                </action>

                <category android:name="android.intent.category.DEFAULT" >
                </category>

                <data android:scheme="testqr" >
                </data>
            </intent-filter>
        </activity>
    </application>

</manifest>
  • 用户启动应用程序(在我的生产应用程序中,这是一个登录屏幕,因此在这种情况下,他们登录的是一个活动)

  •     <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".QRActivity"
                android:label="This is my QR Screen" >
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" >
                    </action>
    
                    <category android:name="android.intent.category.DEFAULT" >
                    </category>
    
                    <data android:scheme="testqr" >
                    </data>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    
  • 用户将参加活动并查看二维码,然后启动二维码扫描程序对其进行扫描(在这种情况下,二维码将被删除)testqr://test)

  •     <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".QRActivity"
                android:label="This is my QR Screen" >
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" >
                    </action>
    
                    <category android:name="android.intent.category.DEFAULT" >
                    </category>
    
                    <data android:scheme="testqr" >
                    </data>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    
  • Android scheme将看到testqr://前缀,并知道如何启动此应用程序。它将跳转到活动,该活动将显示与该代码关联的图形并处理处理该处理。在本例中,它将是Activity\u qr

  •     <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".QRActivity"
                android:label="This is my QR Screen" >
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" >
                    </action>
    
                    <category android:name="android.intent.category.DEFAULT" >
                    </category>
    
                    <data android:scheme="testqr" >
                    </data>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    
  • 理想情况下,我希望该活动通过将屏幕放在堆栈顶部来替换#1中的屏幕,如果按下“后退”按钮,它将返回到#1中的任何屏幕。不幸的是,我得到的结果是,它生成了一个全新的窗口,因此当按下“后退”按钮时,它只会关闭应用程序

  •     <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".QRActivity"
                android:label="This is my QR Screen" >
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" >
                    </action>
    
                    <category android:name="android.intent.category.DEFAULT" >
                    </category>
    
                    <data android:scheme="testqr" >
                    </data>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    将如下所示的
    android:launchMode
    标记添加到您的
    QRActivity
    声明中:

        <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".QRActivity"
                android:label="This is my QR Screen" >
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" >
                    </action>
    
                    <category android:name="android.intent.category.DEFAULT" >
                    </category>
    
                    <data android:scheme="testqr" >
                    </data>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    
    <activity
        android:name=".QRActivity"
        android:label="This is my QR Screen"
        android:launchMode="singleInstance">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:scheme="testqr"/>
        </intent-filter>
    </activity>
    

    FLAG\u ACTIVITY\u NEW\u TASK
    解释了行为。

    感谢您的快速回复。当我运行此程序时,它确实会从QR读取器中跳出,但它仍在运行2个代码副本。第一个副本在ACTIVITY\u main上,第二个副本在ACTIVITY\u QR上。作为另一个测试,我关闭了ACTIVITY\u main并再次扫描,它看起来像e它打开了正确的屏幕。因此我想我的问题是,当它在应用程序中的另一个活动中时,我如何让它使用该应用程序实例并转到正确的活动?以下是带有更新代码的屏幕截图:是否要从
    QRActivity
    启动QR扫描,并在扫描完成后返回此活动删除?如果是,则只需添加
    intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
    使
    QRActivity
    成为最新的活动。如果我的假设不正确,请用图表流程编辑您的问题,说明您希望在活动交互方面如何显示。再次感谢您的回答,我根据您的要求在原始问题中添加了所需的程序流程。其要点是我需要new活动在正在运行的应用程序中打开,并添加到堆栈顶部,以便“后退”按钮正确执行。再次感谢您的帮助。启动模式让我大部分时间都在那里,我也将使用您的其他代码来完成它。谢谢!
        <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".QRActivity"
                android:label="This is my QR Screen" >
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" >
                    </action>
    
                    <category android:name="android.intent.category.DEFAULT" >
                    </category>
    
                    <data android:scheme="testqr" >
                    </data>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>