Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-未找到可在Edittext中打开链接的应用程序_Android_Hyperlink_Android Edittext - Fatal编程技术网

Android-未找到可在Edittext中打开链接的应用程序

Android-未找到可在Edittext中打开链接的应用程序,android,hyperlink,android-edittext,Android,Hyperlink,Android Edittext,如果我点击超链接,我会看到一个对话框,提示没有找到处理此链接的应用程序,但我知道我的android设备有一些应用程序来处理此文件,因为我已经通过单击文件本身打开了此文件。下面是代码片段: case DragEvent.ACTION_DROP: final String DATA = event.getClipData().getItemAt(0).getText().toString();

如果我点击超链接,我会看到一个对话框,提示没有找到处理此链接的应用程序,但我知道我的android设备有一些应用程序来处理此文件,因为我已经通过单击文件本身打开了此文件。下面是代码片段:

                case DragEvent.ACTION_DROP:
                    final String DATA = event.getClipData().getItemAt(0).getText().toString();
                    final String RECORDS_DIR = ((ScribeApplication ) getApplication()).RECORDS_DIRECTORY_ABSOLUTE_PATH;
                    final Spanned HYPERLINK = Html.fromHtml("<a href=\"" + RECORDS_DIR + DATA + "\">" + RECORDS_DIR + DATA + "</a>");
                    editor.setMovementMethod(LinkMovementMethod.getInstance());
                    if (editor.length() > 0)
                    {
                        editor.append("\n");
                        editor.append(HYPERLINK);
                    }
                    else
                        editor.append(HYPERLINK);
                    return true;
case DragEvent.ACTION\u DROP:
最终字符串数据=event.getClipData().getItemAt(0.getText().toString();
最终字符串记录\u DIR=((ScribeApplication)getApplication())。记录\u目录\u绝对路径;
最终跨距超链接=Html.fromHtml(“”);
setMovementMethod(LinkMovementMethod.getInstance());
if(editor.length()>0)
{
editor.append(“\n”);
编辑器.append(超链接);
}
其他的
编辑器.append(超链接);
返回true;
  • 数据是文件名,例如record1.3pg

  • RECORDS_DIR是指向包含录制文件的目录的绝对路径
  • 超链接是记录文件的绝对路径
  • 编辑器是Eidttext的一个实例

如上所述,如果我导航到records目录并单击记录文件本身,我将获得一个应用程序选择器,并可以选择一个应用程序来处理该记录文件。那么,我做错了什么,我没有通过单击edittext中的超链接来获取应用程序选择器,而是通过一个没有找到应用程序的失败对话框


非常感谢

以下是我对Commonware描述的问题的解决方案:

public class ClickableIntentURLSpan extends URLSpan
{
    private Context context;
    private Intent intent;

    public ClickableIntentURLSpan(final Context CONTEXT, final String URL, final Intent INTENT)
    {
            super(URL);
            final boolean INPUT_OK = (CONTEXT != null) && (INTENT != null);
            if (INPUT_OK)
            {
                context = CONTEXT;
                intent = INTENT;
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            }
            else
                throw new IllegalArgumentException("Illegal refer to null.");
    }

    @Override
    public void onClick(final View VIEW)
    {
            context.startActivity(intent);
    }
}



                case DragEvent.ACTION_DROP:
                    final String DATA = event.getClipData().getItemAt(0).getText().toString();
                    final String RECORDS_DIR = ((ScribeApplication ) getApplication()).RECORDS_DIRECTORY_ABSOLUTE_PATH;
                    final String ABSOLUTE_URL = "file://" + RECORDS_DIR + '/' + DATA;
                    final Intent PLAY_RECORD_INTENT = new Intent(Intent.ACTION_VIEW);
                    final File RECORD_FILE = new File(RECORDS_DIR, DATA);
                    PLAY_RECORD_INTENT.setDataAndType(Uri.fromFile(RECORD_FILE), "audio/*");
                    final ClickableIntentURLSpan INTENT_URL = new ClickableIntentURLSpan(getApplicationContext(), ABSOLUTE_URL, PLAY_RECORD_INTENT);
                    final SpannableString HYPERLINK = new SpannableString(DATA);
                    HYPERLINK.setSpan(INTENT_URL, 0, DATA.length(), 0);
                    editor.setMovementMethod(LinkMovementMethod.getInstance());
                    if (editor.length() > 0)
                    {
                        editor.append("\n");
                        editor.append(HYPERLINK);
                    }
                    else
                        editor.append(HYPERLINK);
                    return true;

“RECORDS_DIR是指向包含录制文件的目录的绝对路径”--如果您的意思是它是以
/
开头的路径,则不太可能工作。没有基本URL,所以您需要使用绝对URL,这意味着您需要一个方案,例如
文件://
@commonware我很了解您,谢谢。但问题仍然存在。以下是我在您回复后所做的更改:
final String ABSOLUTE_URL=“file://”+RECORDS_DIR+'/'+DATA;最终跨距超链接=Html.fromHtml(“”)“我导航到记录目录并单击记录文件本身,我会得到一个应用程序选择器,并可以选择一个应用程序来处理该记录文件”--在标准Android中无法做到这一点。我假定您正在使用设备附带的或您安装的某种文件管理器应用程序。在这种情况下,它可以使用
MimeTypeMap
将MIME类型与其使用的
ACTION\u视图
Intent
相关联。我不知道什么是
.3pg
文件(
.3gp
是一个媒体文件;也许你有打字错误),但应用程序可能是使用MIME类型,而不是文件扩展名。你可能不得不使用自己的
ClickableSpan
子类,模仿,这可以将MIME类型添加到
Intent
@commonware中,非常感谢您理解此问题并给出解决此问题的提示。我怎样才能以stackoverflow的方式感谢你?为了完整起见,我将发布解决方案。