开始 Intent(Context(), X.class);工作而 new Intent().setComponent(componentName) 失败
starting Intent(Context(), X.class); works whereas new Intent().setComponent(componentName) fails
我有一个 activity,我在我的清单中声明:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my">
<uses-sdk android:minSdkVersion="14"/>
<application>
<activity
android:name="com.my.InternalDummyActivity"
android:exported="false">
</activity>
</application>
</manifest>
我也尝试过不使用 exported=false
该应用程序包含一个带有另一个 activity 的内部库。
我尝试调用另一个activity(其他名称空间)的显式意图
但我总是得到一个例外:
Intent intent1 = new Intent(activity.getApplicationContext(), InternalDummyActivity.class);
activity.startActivity(intent1);
ComponentName componentName2 =
new ComponentName(
"com.my","com.my.InternalDummyActivity");
Intent intent2 = new Intent().setComponent(componentName2); //dones work
activity.startActivity(intent2);
Process: com.comp.outter, PID: 9267
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.my/com.my.InternalDummyActivity}; have you declared this activity in your AndroidManifest.xml?
我该如何解决这个问题?
您的图书馆不应该知道关于图书馆之外的包和 class 的任何信息。有两种方案会更好:
- 使用隐式意图。比如here
- 使用 openScreen() 方法在您的库中创建接口并在另一个模块中实现它是您的 Activity 谎言
使用以 Context 作为参数的 ComponentName 的 contructor:
ComponentName cn = new ComponentName(context,
"com.my.InternalDummyActivity");
出于某种原因,只有当您动态地知道 class 时,您才可以使用带有两个字符串的构造函数。
我有一个 activity,我在我的清单中声明:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my">
<uses-sdk android:minSdkVersion="14"/>
<application>
<activity
android:name="com.my.InternalDummyActivity"
android:exported="false">
</activity>
</application>
</manifest>
我也尝试过不使用 exported=false
该应用程序包含一个带有另一个 activity 的内部库。
我尝试调用另一个activity(其他名称空间)的显式意图 但我总是得到一个例外:
Intent intent1 = new Intent(activity.getApplicationContext(), InternalDummyActivity.class);
activity.startActivity(intent1);
ComponentName componentName2 =
new ComponentName(
"com.my","com.my.InternalDummyActivity");
Intent intent2 = new Intent().setComponent(componentName2); //dones work
activity.startActivity(intent2);
Process: com.comp.outter, PID: 9267
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.my/com.my.InternalDummyActivity}; have you declared this activity in your AndroidManifest.xml?
我该如何解决这个问题?
您的图书馆不应该知道关于图书馆之外的包和 class 的任何信息。有两种方案会更好:
- 使用隐式意图。比如here
- 使用 openScreen() 方法在您的库中创建接口并在另一个模块中实现它是您的 Activity 谎言
使用以 Context 作为参数的 ComponentName 的 contructor:
ComponentName cn = new ComponentName(context,
"com.my.InternalDummyActivity");
出于某种原因,只有当您动态地知道 class 时,您才可以使用带有两个字符串的构造函数。