liguofeng29’s blog

個人勉強用ブログだっす。

AndroidのIntent - ActionとCategory

Action属性は抽象的な振る舞いである。

これは、Struts2のAction処理後、SUCCESSを返すと似ている。

使用流れ

① AndroidManifest.xmlのAcvivityのAction属性、Category属性を設定する
② ActivityでIntentにActionとCategoryを設定する
③ IntentでActivityを起動する

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.xxx.intentsample" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <activity android:name=".SecondActivity">
            <intent-filter>
                <!-- Action属性値は単なる文字列である -->
                <action android:name="ACTION_TEST1" />
                <action android:name="ACTION_TEST2" />

                <!-- Intentはデフォルトでandroid.intent.category.DEFAULTを持つ-->
                <!-- なので下記は必須!!-->
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
            </activity>
    </application>

</manifest>
package com.example.liguofeng.intentsample;

import android.content.ComponentName;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    public static String ACTION_NAME = "ACTION_TEST1";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.showSecondActivityBtn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Intent生成
                Intent intent = new Intent();
                // Action設定
                intent.setAction(MainActivity.ACTION_NAME);
                // Category設定
                intent.addCategory("android.intent.category.DEFAULT");
                // 起動
                startActivity(intent);
            }
        });
    }
}
package com.example.liguofeng.intentsample;

import android.content.ComponentName;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import java.util.Set;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        TextView view = (TextView) findViewById(R.id.textView);
        // Action値取得
        String action = getIntent().getAction();
        Set<String> categories = getIntent().getCategories();

        view.setText("Action名:" + action +
                     "\nカテゴリ名:" + categories);
    }
}

http://blog-imgs-85.fc2.com/j/a/v/javait/ActionAndCategory.gif