-
如果是"true",则任何应用都可以访问该Activity,并且可以通过其确切的类名启动。
-
如果为"false",则Activity只能由相同应用程序的组件、具有相同用户 ID 的应用程序或特权系统组件启动。这是没有意图过滤器时的默认值。
如果你应用中的 Activity 包含 < intent-filter>,请将此元素设置为 “true”,以允许其他应用启动它。例如,如果Activity是应用程序的Main Activity并包含category:“android.intent.category.LAUNCHER”。
如果此元素设置为"false"并且应用程序尝试启动该活动,则系统会抛出一个 ActivityNotFoundException.
此属性不是限制活动暴露于其他应用程序的唯一方法。权限还可用于限制可以调用 Activity 的外部实体(请参阅 permission 属性)。
不信邪的我果断修改代码进行尝试
<activity android:name=".actvitiy.MainActivity"
android:exported=“false”
果然崩了,但是系统跑出来的不是 ActivityNotFoundException。
日志如下:
2021-10-14 01:38:52.623 1219-1219/com.google.android.apps.nexuslauncher E/BaseDraggingActivity: Unable to launch. tag=AppInfo(id=-1 type=APP container=# com.android.launcher3.logger.LauncherAtom$ContainerInfo@1a1bf6a targetComponent=ComponentInfo{com.scc.demo/com.scc.demo.actvitiy.MainActivity} screen=-1 cell(-1,-1) span(1,1) minSpan(1,1) rank=0 user=UserHandle{0} title=ShuaiCiDemo componentName=ComponentInfo{com.scc.demo/com.scc.demo.actvitiy.MainActivity}) intent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.scc.demo/.actvitiy.MainActivity bnds=[1124,1039][1393,1376] }
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.scc.demo/.actvitiy.MainActivity bnds=[1124,1039][1393,1376] } from ProcessRecord{ae07060 1219:com.google.android.apps.nexuslauncher/u0a128} (pid=1219, uid=10128) not exported from uid 10146
at android.os.Parcel.createExceptionOrNull(Parcel.java:2425)
at android.os.Parcel.createException(Parcel.java:2409)
at android.os.Parcel.readException(Parcel.java:2392)
at android.os.Parcel.readException(Parcel.java:2334)
at android.app.IActivityTaskManager S t u b Stub StubProxy.startActivity(IActivityTaskManager.java:2284)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1743)
at android.app.Activity.startActivityForResult(Activity.java:5404)
at com.android.launcher3.Launcher.startActivityForResult(SourceFile:2)
at com.android.launcher3.BaseQuickstepLauncher.startActivityForResult(SourceFile:6)
at android.app.Activity.startActivity(Activity.java:5744)
at com.android.launcher3.BaseDraggingActivity.startActivitySafely(SourceFile:14)
at com.android.launcher3.Launcher.startActivitySafely(SourceFile:6)
at com.android.launcher3.uioverrides.QuickstepLauncher.startActivitySafely(SourceFile:2)
at com.android.launcher3.touch.ItemClickHandler.startAppShortcutOrInfoActivity(SourceFile:14)
at com.android.launcher3.touch.ItemClickHandler.onClick(SourceFile:11)
at com.android.launcher3.touch.ItemClickHandler.b(Unknown Source:0)
at O0.f.onClick(Unknown Source:0)
at android.view.View.performClick(View.java:7441)
at android.view.View.performClickInternal(View.java:7418)
at android.view.View.access$3700(View.java:835)
at android.view.View$PerformClick.run(View.java:28676)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
总结
可以看出,笔者的工作学习模式便是由以下 「六个要点」 组成:
❝ 多层次的工作/学习计划 + 番茄工作法 + 定额工作法 + 批处理 + 多任务并行 + 图层工作法❞
希望大家能将这些要点融入自己的工作学习当中,我相信一定会工作与学习地更富有成效。
下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。
**如:我需要学习 **Flutter的知识。(大家可以参考我的学习方法)
点击这里了解更多即可领取!
- Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)
- Flutter进阶学习全套手册
- Flutter进阶学习全套视频
lutter进阶学习全套手册**
[外链图片转存中…(img-EylRljBU-1643774219984)]
- Flutter进阶学习全套视频
[外链图片转存中…(img-JEt8NL1u-1643774219985)]
大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。