Androidにおける異なるパケット経路下のActivityジャンプの実現(ActivityNotFoundException解決)


初心者は異なるJavaパッケージディレクトリの下にあるActivity間のジャンプを試みていると、常に実行時にActivityNotFoundExceptionを得て、次は別のパッケージディレクトリの下でActivityジャンプの実現を見にきます。
まず、2つのActivity:Jummp TestActivityとJummp TestActivity 2を作成します。Jump TestActivityにはボタンがあります。ユーザが押すとJummp TestActivity 2にジャンプします。機能は簡単です。
まずJummp TestActivityのコードを実現します。hust.iprar.asce 1885パッケージの中にあります。
public class JumpTestActivity extends Activity {
	
	private Button mButton; 
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mButton = (Button) findViewById(R.id.button); 
        mButton.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent mIntent = new Intent();
				mIntent.setClass(JumpTestActivity.this, JumpTestActivity2.class);
				mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				
				startActivity(mIntent);
				JumpTestActivity.this.finish();		
			}
        	
        });
    }
}
続いてJmp TestActivity 2のコードを実現します。hust.iprar.asce1885 tmpパッケージの中にあります。
public class JumpTestActivity2 extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		TextView mTextView = new TextView(this);
		mTextView.setText("ASCE1885");
		mTextView.setTextColor(Color.RED);
		
		setContentView(mTextView);
	}
	
}
ジャンプの鍵はAndroid Manifest.xmlファイルにあります。ファイルの内容は以下の通りです。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="hust.iprai.asce1885"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".JumpTestActivity"
                  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=".tmp.JumpTestActivity2"></activity>

    </application>
</manifest>
相対パスを使用する前提で、Jummp TestActivity 2の名前は.tmp.Jummp TestActivity 2の相対パッケージ名として書かれていなければなりません。他の形式で、例えばフルバック名.hust.iprar.asce1885 tmp.Jump TestActivity 2などは運行時にActivity NotFounctivity Exptionを取得します。その理由は簡単で、<maifest>のプロパティpackage=“hust.iprar.asce 1885”は、「maifest」の操作はhust.iprar.asce 1885に基づいて行われると明確に指摘しました。 . hust.iprai.asce 1885に対して説明します。
この時、質問があるかもしれませんが、この二つのActivityがあるカバンには関係が含まれていません。例えばJummp TestActivityはhust.iprai.asce 1885にありますが、Jummp TestActivity 2はhust.ipraw.wen 1885にあります。この時、maifestファイルはどう設定しますか?簡単です。相対パスが使えないなら、絶対パスを使いましょう。
<activity android:name="hust.iprai.wen1885.JumpTestActivity2" />