首页 > 解决方案 > 防止 Android Activity 自行启动

问题描述

我的困境得到了解释

我无法弄清楚或发现阻止我的活动自行启动。这是必要的,因为我正在制作一个具有意图过滤器的目录管理器来打开任何文件,以尝试轻松找到并重命名它。例如,单击通知中的文件以由我的应用程序打开以进行重命名。

我的困境总结

但是如果你已经在我的应用程序中,那么运行这个意图是没有意义的。因此,在这种情况下,我想以编程方式阻止我的应用程序成为一种选择。

我的解决方案尝试

我已经尝试了很多东西。Google,关于 ActivityInfo 的 android 参考。我什至尝试创建自己的活动选择器对话框。哪个不能100%准确地工作。如果是这样,我可以简单地从列表中省略我的活动。

我虚心寻求帮助。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest 
xmlns:android="http://schemas.android.com/apk/res/android"
package="jav.android.dir_mgr">

   <uses-sdk android:minSdkVersion="12" android:targetSdkVersion="27" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

   <application
       android:allowBackup="true"
       android:icon="@mipmap/app_icon"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">

       <activity 
           android:name=".DirectoryExplorer"
           android:screenOrientation="portrait" >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>

           <intent-filter>
              <action android:name="android.intent.action.VIEW" /> 
              <category android:name="android.intent.category.DEFAULT" />
              <data android:scheme="file" />
           </intent-filter>

           <intent-filter>
              <action android:name="android.intent.action.VIEW" /> 
              <category android:name="android.intent.category.DEFAULT" />
              <data android:scheme="file" />
              <data android:mimeType="*/*" />
           </intent-filter>

       </activity>

       <activity 
           android:name=".SelectionWindow"
           android:screenOrientation="portrait"
           android:label="Selection Window"
           android:allowEmbedded="true">

           <intent-filter>
          .    <action android:name="jav.android.dir_mgr.SELECT" />
               <category android:name="android.intent.category.DEFAULT" />
           </intent-filter>

       </activity>

   </application>

</manifest>

标签: androidandroid-activity

解决方案


您可以使用EXTRA_EXCLUDE_COMPONENTS从显示给用户的列表中排除您自己的应用程序。请参阅文档,其中指出:

您可以通过提供 Intent.EXTRA_EXCLUDE_COMPONENTS 来排除特定目标。这仅用于删除您可以控制的目标。一个常见的用例是当您的用户从您的应用程序内部共享时隐藏您的应用程序的共享目标,因为他们的意图很可能在您的应用程序外部共享。

调用 Intent.createChooser() 后将 Intent.EXTRA_EXCLUDE_COMPONENTS 添加到您的意图中


推荐阅读