如何查看我的活动是否由我自己的应用程序的活动启动?

时间:2014-08-10 10:02:19

标签: android android-intent android-activity

我有一个显示pdfs的库项目。我的主项目有一些我想要显示的PDF。所以我用它。此外,我为显示pdf的活动添加了intent过滤器(以便其他应用程序也可以使用它来显示pdf)。

我想检测我的PDFviewER是否是由我自己的活动启动的(如果它是从外部启动的话我想显示标题栏)我该怎么做?

这是我的活动声明:

  <activity
                android:name="com.artifex.mupdfdemo.MuPDFActivity"
                android:theme="@android:style/Theme.Holo.Light"
                android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <data android:mimeType="application/vnd.ms-xpsdocument"/>
                    <data android:mimeType="application/xps"/>
                </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>
                <intent-filter>
                    <action android:name="android.intent.action.VIEW"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <data android:mimeType="application/x-cbz"/>
                </intent-filter>
                <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:scheme="file"/>
                    <data android:mimeType="*/*"/>
                    <data android:pathPattern=".*\\.xps"/>
                    <data android:host="*"/>
                </intent-filter>
                <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:scheme="file"/>
                    <data android:mimeType="*/*"/>
                    <data android:pathPattern=".*\\.pdf"/>
                    <data android:host="*"/>
                </intent-filter>
                <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:scheme="file"/>
                    <data android:mimeType="*/*"/>
                    <data android:pathPattern=".*\\.cbz"/>
                    <data android:host="*"/>
                </intent-filter>
</activity>

3 个答案:

答案 0 :(得分:1)

我不能告诉你,是否可以获得启动意图的活动,但作为一种解决方法,你可以在你的Intent中放置一个布尔值,以确保你的应用程序启动了你的PDFViewer。

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(fileUri);
    intent.putExtra("myAppStarted", true);

在您开始的活动中:

    boolean displayTitleBar = getIntent().getBooleanExtra("myAppStarted", false);

请注意,建议使用带有“myAppStarted”的静态final String变量,而不是在不同位置对String进行硬编码。

答案 1 :(得分:0)

如果您的活动是使用startActivityForResult启动的,则可以使用getCallingActivity。更好的解决方案是在您的意图中添加额外信息,告诉您调用活动是否属于您的。

答案 2 :(得分:0)

AppCompat.getReferrer()应该返回启动了您的Activity的包名称。