我们知道调起另外一个组件一般有两种方式,显式的和隐式的。显式的会直接指定要启动的组件,而隐式的则通过匹配条件,调起匹配的组件。
答案当然是否定的,由于android权限的限制,不可能任意的调起另一个apk的指定Activity。
需要在被调起的Activity所在的注册项配置中有exported标识,或者两个apk shareUid。
Intent Filter 是一个过滤机制,它根据Intent的各种属性作为筛选依据,通过了测试该Intent才会到达组件。Intent Filter一般在注册Activity 、 Service 和 Broadcast Receiver的时候声明。
举一个例子:
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.ACTION_SHUTDOWN"/>
<action android:name="@string/NetServiceStart"/>
</intent-filter>
<intent-filter android:priority="2147483647">
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.SCREEN_ON"/>
<action android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
<intent-filter>
<action android:name="@string/cycle_act"/>
</intent-filter>
如上各filter之间是或的关系,根据优先级的大小决定匹配的顺序。
startActivity(new Intent(SplashActivity.this, MainActivity.class));
Intent intent = new Intent();
//设置 Intent 的动作
intent.setAction("com.great.activity_intent.Intent_Demo1_Result3");
Bundle bundle = new Bundle();
bundle.putString("id", strID);
intent.putExtras(bundle);
startActivity(intent);
这是一个简单的使用问题,但我需要明确的知道答案。