检查intent是否正在调用或默认情况下是否启动了Activity

时间:2014-09-08 15:37:49

标签: android android-intent methods

如何检查默认情况下是否启动了Activity,还是从其他活动的intent中调用了Activity的方法? 我认为目前我的代码非常糟糕,因为我通过Try / Catch处理它 它工作正常,但我想要更好的代码

public class MyScan extends Activity {
public final static String EXTRA_MESSAGE = ".MESSAGE";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    checkIntent();
}

public void checkIntent() {
    try {
        Intent i = getIntent();
        String method_name = i.getStringExtra("method_name");// is firing an error if there is no intent call
        if (method_name.equals("scanBarcode")) {
            scanBarcode2();// That starts my method
        }
    } catch (Exception e) {
        setContentView(R.layout.activity_my_scan); // that shows just my Content
    }

}
....

谢谢你的暗示Alex Terreaux

我以这种方式改变了代码

public void checkIntent() {
    Intent i = getIntent();
    if (i != null) {
        String method_name = i.getStringExtra("method_name");
        if (method_name != null && method_name.equals("scanBarcode")) {
            scanBarcode2();
        } else {
            setContentView(R.layout.activity_my_scan);
        }
    }
}

并且有效。

3 个答案:

答案 0 :(得分:5)

尝试检查getIntent()的结果是否为空。

答案 1 :(得分:4)

你可以使用额外的东西。在strings.xml中添加一个新字符串:

<string name="starting_from_intent">STARTING_FROM_INTENT</string>

在您通过意图开始活动的文件中,您可以使用:

intent.putExtra(getString(R.string.starting_from_intent), 1);

然后,在checkIntent()中,执行:

boolean startedFromIntent;

Intent i = getIntent();
if (i.getIntExtra(getString(R.string.starting_from_intent), 0) == null
|| i.getIntExtra(getString(R.string.starting_from_intent), 0) == 0) 
    startedFromIntent = false;

else 
    startedFromIntent = true;

希望这并不难理解,希望这会有所帮助。

答案 2 :(得分:0)

当您的活动仅由startActivity()启动时,目标活动中的getCallingActivity()方法将返回null。

当startActivityForResult()调用它时,它将返回调用活动的名称。