2 slaks SLaks 于 2013.04.26 11:26 提问

使用不同包通过setClassName不能启动新的 intent

我想动态的启动一个新的 intent,因此 setClassName 是一个很好的选择。
首先,在Manifest中定义3个activity:

<activity android:name="com.example.pkg2.Act" />
<activity android:name="com.example.pkg1.Act1" />
<activity android:name="com.example.pkg1.Act2" />

com.example.pkg2.Act

Intent intent = new Intent();
if(index == 0) intent.setClassName(Act.this, "com.example.pkg1.Act1");
else intent.setClassName(Act.this, "com.example.pkg1.Act2");
startActivity(intent);

但是获得下面的异常:

Unable to find explicit activity class {com.example.pkg2.Act/com.example.pkg1.Act1}; have you declared this activity in your AndroidManifest.xml?

好像只能使用 setClassName 来动态的启动新的 Activity,还必须的在相同的包中。
如何处理这个问题?

5个回答

xiaoyaovsxin
xiaoyaovsxin   2013.04.27 11:27
已采纳

intent.setClassName(Act.this, Act1.class);

xyg165
xyg165   2013.04.26 14:22

API中。。setClassName(packageContext, className)和setClassName(packageName, className) setClassName只有这两种方法setClassName("com.example.pkg1"(包名),"com.example.pkg1.Ac1"(这个包下面的那个ACTIVITY));

u010671061
u010671061   2014.08.06 14:49

Intent localIntent1 = new Intent("android.intent.action.VIEW", localUri);//和 VIEW_ACTION 相同,是在数据上执行的标准动作
localIntent1.setData(localUri);//指定特定的Uir
localIntent1.addFlags(1);
localIntent1.setFlags(268435456);
localIntent1.setClassName("com.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity");
startActivity(localIntent1);

luszhu123
luszhu123   2014.11.21 10:33

Act.this感觉有问题,intent.setClassName(packageName, className);
前面应该是app的包名

luszhu123
luszhu123   2014.11.21 10:33

Act.this感觉有问题,intent.setClassName(packageName, className);
前面应该是app的包名

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!