根据应用程序的状态激活飞溅活动或主要活动
问题描述:
我想用我的应用程序从另一个应用程序打开特定文件来处理它。例如,从Gmail应用程序打开邮件中的附件。根据应用程序的状态激活飞溅活动或主要活动
通过以下intent-filter设置,它工作正常。当我打开一个文件时,MainActivity显示并处理它,而不管它是通过另一个应用程序打开还是直接从我的应用程序打开。但是,如果从另一个应用程序打开该文件,我希望从SplashScreen活动开始流程。另一方面,如果应用程序已被激活,直接激活MainActivity。
有谁知道如何解决?
AndroidManifest.xml中
<activity android:name=".SplashScreenActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".MainActivity">
<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:mimeType="*/*"
android:scheme="content" />
</intent-filter>
</activity>
答
你必须从
更换您的活动
<activity android:name=".SplashActivity">
而且在SplashActivity
得到Action
从意图,然后检查行动是否android.intent.action.VIEW
然后打开您的MainActivity
并将您的文件从SplashActivity
到MainActivity
。
就是这样
答
您不能从清单文件更改启动器活动。您可以在intent-filter中设置多个<category android:name="android.intent.category.LAUNCHER"/>
,但您必须设置默认活动。
但是有一个办法可以解决你的问题......
-
请与无UI的启动活动,并在onCreate方法条件下打开相应的活动。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent; if (condition) { intent = new Intent(this, ClassA.class); } else { intent = new Intent(this, ClassB.class); } startActivity(intent); finish(); }
OR
-
在的setContentView方法之前的溅活动写入条件。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent; if (condition) { setContentView(); } else { intent = new Intent(this, ClassB.class); startActivity(intent); finish(); } }
希望这会帮助你。
在您的SplashActivity检查您的条件,并且如果满足该条件,则在调用setContentView()之前直接启动MainActivity。 – Rachit
嗨@Rachit,但如果我想恢复以前的MainActivity状态? – tdchang
以前的状态? – Rachit