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>