Search code examples
androidintentfilter

android intent filter?


I'm feeling stupid.This is very clear but I can not solve my problem.So excuse me for my question.
My problem is in about intenfilter.This is application tag of my manifest file:

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".AlakyTestActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:label="reza"
            android:name=".A2" >
            <intent-filter >
                <action android:name="MAIN" />

                <category android:name="LAUNCHER" />
            </intent-filter>
        </activity>
    </application>     

And this is my button click listener:

b1 = (Button)findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent intent2 = new Intent();
                intent2.setAction("MAIN");
                intent2.addCategory("LAUNCHER");
                startActivity(intent2);
            }
        });      

I think that all things is good but when I run my code and click on b1,I get this erroe:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=MAIN cat=[LAUNCHER] }      

Edit:
This is A2:

public class A2 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.main2);
    }


}

Please help me.


Solution

  • You should set the android:name of the second activity to the (package name).(the class) for example, lets say the second activity class is 'com.my.app.reza' you should add you the manifest:

        <activity
            android:label="@string/app_name"
            android:name=".reza" >
            <intent-filter >
                <action android:name="com.my.app.REZA" />
                <category android:name="android.intent.category.DEFUALT" />
            </intent-filter>
        </activity>
    

    and you should start the activity like that:

    Intent intent = new Intent("com.my.app.REZA");
    startActivity(intent);
    

    NOTE that it isn't the best way to do it, you shouldn't mess to much with package name I'd recommend you to do it the following way:

        <activity
            android:label="@string/app_name"
            android:name=".reza" />
    

    and start it like that:

    startActivity(new Intent( this.getContext() , reza.class );