【问题标题】:Check if intent is calling or Activity is started by default检查intent是否正在调用或Activity是否默认启动
【发布时间】:2014-11-01 21:22:18
【问题描述】:

如何检查 Activity 是默认启动还是从其他 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);
        }
    }
}

这行得通。

【问题讨论】:

    标签: android android-intent methods


    【解决方案1】:

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

    【讨论】:

    • 你的意思是 if (i != null)
    • 已关闭但不是雪茄,因为如果 (i != null) 为真,但您将我引向正确的方向,请参阅我最初的帖子
    • 是的,我就是这个意思。很高兴我能帮上忙。
    【解决方案2】:

    您可以使用附加功能。在 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;
    

    希望这不是太难理解,希望对您有所帮助。

    【讨论】:

    • 对不起 - 我不小心发布了两个答案。我希望这个更详细。我并不是要发布其他答案...
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2017-12-16
      相关资源
      最近更新 更多