【问题标题】:How to "cast" String directly to Intent?如何将字符串直接“投射”到 Intent?
【发布时间】:2015-02-27 05:49:26
【问题描述】:

我创建了一个 Activity 以从已安装的应用中选择一个应用,并获取所选应用的启动器意图并将该意图传递回启动 Activity:

Intent intent = packageManager
                .getLaunchIntentForPackage(app.packageName);

        if (null != intent) {
            Intent data = new Intent();
            data.setData(Uri.parse(intent.toString()));
            setResult(RESULT_OK, data);
            finish();
        }

开始活动的onActivityResult:

public void onActivityResult(int requestCode, int resultCode, Intent data){
    if (requestCode == request_Code){
        if (resultCode == RESULT_OK){                   
            intent = data.getData().toString();     
            startActivity(new Intent(intent));
        }

我从 Logcat 中提取了intent String 和 startActivity 中的Intent,我得到了这个:
intentString:Intent { act=android.intent.action.MAIN cat=[android. intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.providers.downloads.ui cmp=com.android.providers.downloads.ui/.DownloadsListTab }
Intent in startActivity: Intent { act=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.providers.downloads.ui cmp=com.android.providers.downloads .ui/.DownloadsListTab } }
(我的应用因为这个错误的 Intent 而崩溃)
如您所见,我传递回起始 Activity 的字符串是我需要的 Intent 本身(在字符串中)
那么无论如何我可以在没有 Intent 的构造函数的情况下将该 String 设为 Intent 吗?或者可能是一种将 Intent 直接传递给起始 Activity 的方法?

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    我认为您正在尝试将字符串传递给其他活动,您需要将其传递给 extras。

    String messageToPass= "Hello Word!";

    Intent intent = new Intent(this, toClassName.class); intent.putExtra("message", messageToPass); startActivity(intent);

    然后在其他活动中提取,例如

    Intent intent = getIntent(); String messageReceived= intent.getExtras().getString("message");

    【讨论】:

    • 对不起,如果我理解您的想法错误,但我将字符串传递给其他活动没有问题。问题中的“意图”字符串是传回的字符串。
    【解决方案2】:

    看起来你让它“太复杂了”......你试图使用一个字符串来启动一个活动,而不是一个意图。相反,只需传递您要使用的 Intent。例如,试试这个:

    Intent intent = packageManager
                .getLaunchIntentForPackage(app.packageName);
    
        if (null != intent) {
            setResult(RESULT_OK, intent);
            finish();
        }
    

    然后这样做:

    public void onActivityResult(int requestCode, int resultCode, Intent data){
        if (requestCode == request_Code){
            if (resultCode == RESULT_OK){                   
                startActivity(data);
            }
        }
    }
    

    【讨论】:

    • 我试过了,得到了这个异常:E/AndroidRuntime(6483): java.lang.RuntimeException: 传递结果失败 ResultInfo{who=null, request=1, result=-1, data=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.sec.android.gallery3d cmp=com.sec.android.gallery3d/.app.GalleryActivity }} 到活动{xxx}:java.lang.NullPointerException:println需要一条消息。(这次我选择Gallery,所以Intent有点不同)
    • 为什么我不能直接将这个意图传递给开始的 Activity?
    • 实际上它起作用了。我删除了一个值分配,但我忘了删除在 onActivityResult 值中记录该值的日志,因此应用程序崩溃了。非常感谢。
    • 是的 - 我正要评论问题是println,它看起来像一个日志,在您发布的代码中并不明显。很高兴你找到它!
    • 是的,我很抱歉省略了它,我认为它会使代码更清晰。愚蠢的错误。
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2016-05-07
    • 2016-10-08
    • 2012-08-21
    • 2020-01-30
    相关资源
    最近更新 更多