【问题标题】:How to pass additional intent values to a ACTION_OPEN_DOCUMENT_TREE Intent如何将额外的意图值传递给 ACTION_OPEN_DOCUMENT_TREE 意图
【发布时间】:2015-04-18 07:09:21
【问题描述】:

我只是尝试通过 ACTION_OPEN_DOCUMENT_TREE Intent 传递一个附加值,但我无法管理它。我需要显示树对话框,因此用户可以选择一个文件夹,我必须传递一些额外的信息。我已经将此传递机制与其他意图一起使用,并担心这不适用于特殊意图 ACTION_OPEN_DOCUMENT_TREE ?!

我启动意图并传递值 simplevalue,如下所示: Intent 意图 = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

                  String sOperations="simplevalue";
                  intent.putExtra("simplevalue", sOperations);
                  startActivityForResult(intent, 42); 

我尝试接收如下简单值:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    // if (requestCode == REQUEST_QUICKLIST) {
    if (resultCode == Activity.RESULT_OK) {

        if(requestCode==42){

            String simplevalue="";
            simplevalue=data.getStringExtra("simplevalue"); // <-- is null

            Bundle extras = data.getExtras(); // <- is null
            if(extras == null) {
                simplevalue= null;
            } else {
                simplevalue= extras.getString("simplevalue");
            }

调试时simplevalue 和bundle extras 为空。 如何使用 ACTION_OPEN_DOCUMENT_TREE Intent 传递一个简单的字符串?

【问题讨论】:

  • 你实现了吗?
  • 没有。解决方案朝另一个方向发展。
  • 好的。我认为我们传递给 startActivityForResult 的意图与调用 onActivityResult 的意图不同。因此它不包含您指定的值。
  • 你是怎么做的任何提示?谢谢。
  • 我没有使用 Tree 函数。它对我来说不可用,因为我必须将数据从互联网流式传输到那个可写空间。

标签: android android-intent android-5.0-lollipop


【解决方案1】:

在另一个类上,您可以使用简单值,

 Intent intent = getIntent();
 String simplevalue = intent.getStringExtra("simplevalue");

【讨论】:

  • 我不明白?正如您在我的代码中看到的,我已经使用了 getStringExtra 并且返回值为 null。你能更详细地描述一下你对另一个类的意思吗?
【解决方案2】:

我认为我们传递给 startActivityForResult 的意图与调用 onActivityResult 的意图不同。因此它不包含您指定的值。

我认为我们可以使用中间活动来管理它,该活动接受并存储您通过意图传递的值并启动意图 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 在 onActivityResult 中,您可以将存储的值作为结果意图并将其作为中间活动结果提供。

【讨论】:

    【解决方案3】:

    迟到了,但也许会有用。要绕过意图,并且仍然在您的onActivityResult 中访问您的simplevalue,我建议在您的活动中保留一个字典(可能是持久的,这取决于您),由请求代码键入。例如,在:

    Map<int, String> map = new HashMap<int, String>();
    int nextOpenDocTreeCode = 43800;
    

    在触发意图的某个范围内(例如 43800-43899)循环您的请求代码,并将其放入地图中:

    map.put(nextOpenDocTreeCode++, "type of animal");
    nextOpenDocTreeCode = (nextOpenDocTreeCode >= 43900) ? 43800 : nextOpenDocTreeCode;
    

    然后在您的onActivityResult 中检索它:

    simplevalue = map.get(requestCode);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      相关资源
      最近更新 更多