美文网首页
Android Quick Tips #7 — Intents

Android Quick Tips #7 — Intents

作者: 签到钱就到 | 来源:发表于2016-06-09 15:49 被阅读30次

    原文by Norman Peitek 翻译by Dexter0218

    startActivityForResult()的内部使用

    每个Android开发者都知道startActivityForResult(Intent i)会调用外部的app去做一些特定的事情,然后得到返回的结果。比如,使用Camera应用去拍照。然而,startActivityForResult(Intent i)在内部使用得并不多。最好的例子是,如果你的应用有一个LoginActivity。那个LoginActivity经常不是正常使用的一部分,而是一个一次性的操作来满足一个特定操作的结果。

    所以,在LoginActivity里不要使用startActivity()和finish()的结合,使用startActivityForResult(Intent i)会是更好、更清晰的选择。调用Activity调用登录Activity,并告诉它需要有个结果返回:

    public final static int LOGIN_REQUEST_CODE = 1;
    
    public void loginButtonClick(View view) {  
        Intent intent = new Intent(MainActivity.this, LoginActivity.class);
        startActivityForResult(intent, LOGIN_REQUEST_CODE);
    }
    

    它会打开LoginActivity。LoginActivity会处理登录并且返回一个结果。例如返回一个用户对象说明成功登录,或错误信息表明登录失败。

    bool loginSuccessful = true; // or false, depending on the login  
    String errorMessage = .. // set when there was an error
    
    if (loginSuccessful) {  
        setResult(RESULT_OK); // you can call setResult() without additional data
    }
    else {  
        // you can call setResult() with additional data by passing an intent
        Intent resultIntent = new Intent();
        resultIntent.putExtra("error", errorMessage);
        setResult(RESULT_CANCELED, resultIntent);  
    }
    
    finish();  
    

    另一个方面,会返回数据到调用者MainActivity,MainActivity必须接收这个结果,并采取合适的操作:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == LOGIN_REQUEST_CODE) {
            if (resultCode == RESULT_OK){
                 // todo login was successful, take appropriate action
            }
            else if (resultCode == RESULT_CANCELED) {
                // login failed, get error message
                String errorMessage = data.getStringExtra("error");
    
                // todo take appropriate action matching the error message
            }
        }
    }
    

    应当给你一个好的例子,如何干净简单去实现一个Activity,并返回一个结果。如果想要知道更多,看看下面的链接:

    Intent.ACTION_CALL和 Intent.ACTION_DIAL的区别

    我们已经遇到多个Android开发者不知道Intent.ACTION_CALLIntent.ACTION_DIAL之间的微妙关系。

    Intent.ACTION_CALL,打开手机app,拨号并呼叫一个号码。用户在动作结束前没有检查呼叫号码的机会。这也就是Intent.ACTION_CALL需要一个额外的权限:

    <uses-permission android:name="android.permission.CALL_PHONE" />  
    

    Intent.ACTION_DIAL,在大多数使用案例中,非常重要也是用户友好地,应该只打开手机应用,输入手机号码,但并不会点击那个绿色的“呼叫”按钮。假如用户按错了,他需要自己决定是否真的要联系这个号码。并且不需要权限声明。

    我们希望你学到了一些Intent的知识。你的Intent的技巧是啥?可以在下面的评论中分享一下。

    相关文章

      网友评论

          本文标题:Android Quick Tips #7 — Intents

          本文链接:https://www.haomeiwen.com/subject/hutsdttx.html