[英]ActivityNotFoundException?
我在以下代码中收到ActivityNotFoundException
:
Main.java
Intent intent = new Intent();
intent.setAction("com.test.app.TEST");
startActivity(intent); // ActivityNotFoundException
的Manifest.xml
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
我也遇到过这个问题,正如jpahn所描述的那样简洁。
前线的时期对我没有任何帮助。
即使正是这样(包括编辑在内的原始问题的副本),我仍然会得到ActivityNotFoundException。
Main.java
Intent intent = new Intent();
intent.setAction("com.test.app.TEST");
startActivity(intent); // ActivityNotFoundException
的Manifest.xml
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
经过多次试错后,只需将其添加到清单中的intent-filter即可解决此问题:
<category android:name="android.intent.category.DEFAULT" />
所以最终的清单文件包含:
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
确保在aplication中的manifest.xml中声明您的活动:
<application>
<activity android:name=".YourNewActivity"/>
</application>
要开始新的活动:
Intent intent = new Intent(main.this, YourNewActivity.class);
startActivity(intent);
主要代表当前活动,
将活动类从一个包移动到另一个包后,我收到此错误。 清洁构建解决了它(项目 - >清洁)。
添加一个。 (点)在Android Manifest中的活动名称之前。 所以它应该是android:name =“。WordsToSpeakMainActivity”
android框架中有两种类型的意图 ,你正在使用的1-Implicit意图 ,
<activity android:name=".MainActivity" android:theme="@android:style/Theme.Dialog">
<intent-filter>
<action android:name="com.test.app.TEST" />
</intent-filter>
</activity>
只需在意图过滤器中添加一行
<intent-filter>
<action android:name="com.test.app.TEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
2-显式意图
Intent i=new Intent(CurrentActivity.this,WhereWeWantToGoActivity.class);
startActivity(i);
为了安全起见,您还可以调用以下新活动:
Intent intent = new Intent();
intent.setClass(this, THECLASSNAME);
startActivity(intent); //
但是,您必须将活动添加到androidmanifest - 并写一个。 在它面前,例如
<activity android:name=".YOURACTIVITYNAME"></activity>
我对@Tom Pace的答案有一些补充。 答案是完全正确的,但要更清楚:
因缺少而发生ActivityNotFoundException
<category android:name="android.intent.category.DEFAULT" />
因为当Android OS在清单文件中看到这一点时,了解此活动可以接收意图。
抛出的ActivityNotFoundException
点是,当activity(intent-creator-activity)尝试为其他活动创建意图(intent-receiver-activity)时,Android OS会看到接收器活动的意图,但接收者活动不会接收任何人。 然后,Android OS会向intent-creator-activity返回null或空意图。 并且startActivity
抛出该异常。
我找到了Android开发人员的代码来避免这种异常:
// Verify the original intent will resolve to at least one activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
要通过字符串定义启动活动,请使用:
Intent intent = new Intent();
intent.setComponent(
new ComponentName("com.app", "com.app.activity.TheActivity"));
startActivity(intent);
在AndroidManifest.xml的最顶部,您将看到package属性
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.example"
然后,在activity标签中,您将看到name属性:
<activity
android:name=".Something"
确保包名称和活动名称在连接在一起时,可以生成活动的完整包规范,即
com.android.example
+ .Something
= com.android.example.Something
否则,您将获得ActivityNotFoundException
。
我找到了解决这个问题的方法......我在android工作室项目中使用了2个模块,这里的事情是我需要将活动添加到主清单文件中
<activity android:name="com.HeadApp.ARTry.UnityPlayerActivity"
android:clearTaskOnLaunch="false" android:label="@string/app_name"
android:screenOrientation="portrait"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
/>
我在团结活动清单中有这个,我只是复制了活动并将其粘贴在主要清单中,就是这样,希望它有所帮助,在过去的3周里我们一直在苦苦挣扎
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.