如何从针对android的意图中获得正确的操作

时间:2017-08-25 05:11:15

标签: android android-intent action

有两个应用程序:Caller,Callee

案例1>

当我从主屏幕启动Callee应用程序时,我可以从INTENT获得一个动作(" android.intent.action.MAIN")。

当Callee运行时,我再次从Caller应用程序启动Callee应用程序(" andoird.intent.action.test")。然后我得到了动作(" android.intent.action.MAIN")。不行动(" andoird.intent.action.test")。

我如何获得动作(" andoird.intent.action.test")?

案例2>

当我使用动作启动Callee应用程序时(&#34; andoird.intent.action.test&#34;),我得到了动作(&#34; andoird.intent.action.test&#34;)。< / p>

当Callee正在运行时,我从主屏幕启动Callee应用程序。然后我得到了动作(&#34; andoird.intent.action.test&#34;)。不行动(&#34; android.intent.action.Main&#34;)。

我如何获得动作(&#34; android.intent.action.Main&#34;)?

我错过了什么才能采取适当的行动?

以下是来电代码。

public class CallerActivity extends AppCompatActivity {
public static final String ACTION_TEST = "android.intent.action.test";

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

    Button test = (Button) findViewById(R.id.gotoSetting);
    test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = getPackageManager().getLaunchIntentForPackage(PACKAGE);
            intent.setAction(ACTION_TEST);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            startActivity(intent);
        }
    });
}

}

以下是Callee代码。

public class CalleeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.e("test", "onCreate()");
    Log.e("test", getIntent().getAction());
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.e("test", "onNewIntent()");
    Log.e("test", getIntent().getAction());
}

}

这是Callee的AndroidManifest。

        <activity
        android:name=".CalleeActivity"
        android:launchMode="singleTop"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

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

请帮忙。

1 个答案:

答案 0 :(得分:0)

替换此代码:

    @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.e("test", "onNewIntent()");
    Log.e("test", getIntent().getAction());// getIntent() will return old intent
}

    @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.e("test", "onNewIntent()");
    Log.e("test", intent.getAction()); //use new intent
}