使用intent-filter
之间是否存在任何功能差异Intent myIntent = new Intent("com.this.that.MYACT");
myIntent.setPackage("com.this.that");
VS。
Intent myIntent = new Intent(context, MyActivity.class);
myIntent.setPackage("com.this.that");
是其中之一
或者根本没有区别?
TIA
答案 0 :(得分:1)
答案是:使用“外部应用”的作者告诉您使用的任何Intent
结构,或使用getLaunchIntentForPackage()
上的PackageManager
获取Intent
适合一般启动“外部应用程序”。
我在两种情况下都测试了它们,并且没有看到任何行为上的差异。
这只是因为com.this.that.MyActivity
碰巧有一个<intent-filter>
或者特意标记了自己被导出。默认情况下,不会导出活动,也不能使用Intent
从第三方应用启动它们。
此外,您的代码甚至不会编译,因为MyActivity
不在您的项目中(它位于“外部应用程序”中),因此MyActivity.class
不存在。编译(并成功运行)的唯一方法是,如果您的应用程序和“外部应用程序”碰巧在同一个Java包中具有相同的活动类,这是不可能的。
安全?
“外部应用”的作者应该使用Intent
动作(您的第一个场景),因为在重构代码面前更容易保持这些一致性。如果“外部应用程序”的作者将其代码重构为子包,重命名活动类等,则第二种方法将会中断。基本上,如果您愿意,操作名称将成为活动的公共API(以及任何活动)记录的额外内容)。这就是为什么您看到Android SDK专门为其自己记录和支持的活动使用此方法。
快?
可能