Nam*_*ace 2 android android-intent android-activity
在使用StartActivityForResult之前,我试图将某些数据附加到intent上.
当intent在OnActivityForResult中返回时,我想访问我在intent中附加的数据.因此,我可以将意图中检索到的数据与数据库条目,容器ID等相关联.
不幸的是,返回的意图似乎与我开始的意图不同.我尝试在测试用例中比较(==)旧的和新的意图,结果失败,并且毫不奇怪,我尝试追加的数据不存在.是否有任何关于原始意图的链接?
我尝试过的基本想法:
伪造代码中的StartActivityForResult代码:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
i.putExtra([-Key-], [int]);
i.putExtra([-Key-], [int]);
....
getParentFragment().startActivityForResult(i, requestCode); 
Run Code Online (Sandbox Code Playgroud)
OnActivityResult的伪代码
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
....        
    switch(requestcode){
    case RESULT_LOAD_IMAGE :
    //These always evaluate to default.  The intent returns with the picture,
    //and I process it fine (with default values), but any extra data i try to append 
    //to the intent is lost.  
    int rowId = intent.getIntExtra([-Key-], [-def_value-]);
            ....
            ....
    break;
    default:
        throw new RuntimeException();
    }
}
Run Code Online (Sandbox Code Playgroud)
    使用隐式Intent解析启动Activity时,执行此操作时您正在执行此操作:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
....
getParentFragment().startActivityForResult(i, requestCode);
Run Code Online (Sandbox Code Playgroud)
您没有任何保证实际将选择哪个Activity来执行操作.因此,您的Activity和Activity之间没有任何"契约"将用于执行所需的操作.不幸的是,这是使用隐式意图解析的一种不利之处.因为两个活动之间没有合约,所以您无法确定您将在返回给您的结果中获得什么onActivityResult().
如果你查看文档ACTION_PICK,它至少表明应该发生什么(如果所选的Activity实际上与文档读取的方式相同):
输入:getData()是包含数据目录(vnd.android.cursor.dir/*)的URI,用于从中选择项目.
输出:已拾取项目的URI.
这表示您应该提供一个包含数据目录的URI,并且您将返回一个Intent包含所选项目的URI的URI.而已.这就是你所能得到的一切.你可以将大量其他"额外内容"放入Intent你传递给Activity的内容中ACTION_PICK,但是Activity不关心那些附加内容,只会忽略它们.执行该操作的Activity ACTION_PICK将创建一个Intent包含所选项的URI的new ,并将其传递给您.它没有通过你原来的Intent背部."输入Intent"和"输出Intent"完全不同,彼此之间没有任何关系.
为了解决您的问题,我建议您创建一个唯一的整数requestCode,并将"附加内容"保存在Activity与之关联的表格或地图中requestCode.然后,您可以ACTION_PICK使用requestCode.启动活动.在onActivityResult()您可以使用返回的requestCode参数来查找您保存的"额外内容",并且您将能够将返回的URI与它们相关联.
注意:还有一件事:当您呼叫时,startActivityForResult()您的活动将暂停,并且已启动的活动将运行.onActivityResult()在调用之前,您的活动将不会恢复.这意味着您ACTION_PICK在任何给定时间都只能有一个待处理.因此,您可能不需要将特定PICK操作与任何给定数据相关联的方法.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2187 次  |  
        
|   最近记录:  |