我想用我的应用程序打开另一个应用程序中的特定文件来处理它。例如,在Gmail应用程序的邮件中打开附件。
使用以下intent-filter设置,它可以正常工作。当我打开文件时,MainActivity会显示并处理它,无论是通过其他应用程序打开还是直接从我的应用程序打开。但是,如果从另一个应用程序打开文件,我希望从SplashScreen Activity开始流程。另一方面,如果已激活应用程序,请直接激活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>
答案 0 :(得分:0)
你必须替换你的活动
到
<activity android:name=".SplashActivity">
在SplashActivity
获取来自Intent的Action
,然后检查操作是否为android.intent.action.VIEW
然后打开您的MainActivity
并将您的文件从SplashActivity
发送到{ {1}}。
就是这样
答案 1 :(得分:0)
您无法从清单文件更改启动器活动。您可以在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方法之前的splash活动写入条件中。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent;
if (condition) {
setContentView();
} else {
intent = new Intent(this, ClassB.class);
startActivity(intent);
finish();
}
}
希望这会对你有所帮助。