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