android开发过程中,使用intent.setAction()方法指定了action的字符串,在运行中出现Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent错误的记录。
调用action的activity代码:
public class WelcomeActivity extends Activity{ private static final String LOGIN_ACTIVITY = "com.app.activity.action.LOGIN_ACTIVITY"; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.welcome); TextView textView = (TextView)findViewById(R.id.textView1); textView.setText("欢迎使用本系统"); } public void goIn(View source){ //处理进入登录页面的操作 Intent intent = new Intent() ; intent.setAction("com.app.activity.action.LOGIN_ACTIVITY"); startActivity(intent); } }
被调用的activity代码:
public class LoginActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.login); } }
两个activity都很简单,没有实现真正的业务流程。
AndroidManifest.xml文件内容
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.app.activity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.app.activity.WelcomeActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".LoginActivity" android:label="@string/loginTitle" > <intent-filter> <action android:name="com.app.activity.action.LOGIN_ACTIVITY" /> </intent-filter> </activity> </application>
在运行上述程序的时候出现了:Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.app.activity.action.LOGIN_ACTIVITY }
经过查找,发现在AndroidManifest.xml文件中,被调用的LoginAction的intent-filter没有定义category。而在执行startActivity()的时候,如果没有指定category,那么Android会自动默认category是android.intent.category.DEFAULT。所以,在AndroidManifest.xml中加入
<category android:name="android.intent.category.DEFAULT" />
问题得以解决。修改后的 AndroidManifest.xml的完整文件是:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.app.activity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.app.activity.WelcomeActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".LoginActivity" android:label="@string/loginTitle" > <intent-filter> <action android:name="com.app.activity.action.LOGIN_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>