繁体   English   中英

无法从 Android 10 中的意图打开文件

[英]Can't open file from intent in Android 10

我正在尝试从 Intent.ACTION_GET_CONTENT 访问文件,当我在我的设备(即 Android 8)上尝试它时,它工作得非常好。 但是,当我在朋友的设备(Android 10)上试用它时,它不起作用。 当我尝试从 Word 打开文件时,它一直说“无法打开文件。尝试将文件保存在设备上,然后打开它。” 当我打开 pdf 文件时,它什么也不显示,只是黑屏。

btn_add OnClick 监听器

        btn_add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String[] mimeTypes = {"application/vnd.google-apps.document", "application/pdf", "application/vnd.google-apps.form",
                    "application/vnd.google-apps.presentation", "application/vnd.google-apps.spreadsheet",
                    "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
                    "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                    "application/x-excel"};
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : "*/*");
                if (mimeTypes.length > 0) {
                    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
                }
            } else {
                String mimeTypesStr = "";

                for (String mimeType : mimeTypes) {
                    mimeTypesStr += mimeType + "|";
                }
                intent.setType(mimeTypesStr.substring(0, mimeTypesStr.length() - 1));
            }                startActivityForResult(intent, 100);
        }
    });

onActivityResult

                titleArrays = new ArrayList<>();
                ItemAdapter adapter = new ItemAdapter(titleArrays);
                RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
                recyclerView.setLayoutManager(layoutManager);
                recyclerView.setAdapter(adapter);
                Log.d("Id: ", ""+id);

                hashMap.put(id, data.getData());
                returnCursor =
                        getContentResolver().query(data.getData(), null, null, null, null);
                nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
                returnCursor.moveToFirst();
                titleHashmap.put(id, returnCursor.getString(nameIndex));
                for (int i : hashMap.keySet()){
                    titleArrays.add(new ItemProperty(hashMap.get(i), titleHashmap.get(i)));
                }
                img_file.setImageResource(0);

                id++;
                // Item OnClick
                adapter.setOnItemClickListener(new ItemAdapter.OnItemClickListener() {
                    @Override
                    public void onItemClick(int position) {
                        Log.d("Position: ", ""+position);
                        Intent intent = new Intent(Intent.ACTION_VIEW, titleArrays.get(position).getUri());
                        startActivity(intent);
                    }
                });

我想知道我做错了什么。 如果你们知道,请告诉我。 谢谢!

所以,我终于按照CommonsWare的说明解决了这个问题! 我添加了Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION到我的Action_VIEW Intent并将我的ACTION_GET_CONTENT更改为ACTION_OPEN_DOCUMENT

btn_add OnClick 监听器

    String[] mimeTypes = {"application/vnd.google-apps.document", "application/pdf", "application/vnd.google-apps.form",
                    "application/vnd.google-apps.presentation", "application/vnd.google-apps.spreadsheet",
                    "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
                    "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                    "application/x-excel"};
            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : "*/*");
                if (mimeTypes.length > 0) {
                    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
                }
            } else {
                String mimeTypesStr = "";

                for (String mimeType : mimeTypes) {
                    mimeTypesStr += mimeType + "|";
                }
                intent.setType(mimeTypesStr.substring(0, mimeTypesStr.length() - 1));
            }
            startActivityForResult(intent, 100);

onActivityResult

if (resultCode == RESULT_OK) {
                titleArrays = new ArrayList<>();
                ItemAdapter adapter = new ItemAdapter(titleArrays);
                RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
                recyclerView.setLayoutManager(layoutManager);
                recyclerView.setAdapter(adapter);
                Log.d("Id: ", ""+id);

                hashMap.put(id, data.getData());
                returnCursor =
                        getContentResolver().query(data.getData(), null, null, null, null);
                nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
                returnCursor.moveToFirst();
                titleHashmap.put(id, returnCursor.getString(nameIndex));
                for (int i : hashMap.keySet()){
                    titleArrays.add(new ItemProperty(hashMap.get(i), titleHashmap.get(i)));
                }
                img_file.setImageResource(0);

                id++;
                // Item OnClick
                adapter.setOnItemClickListener(new ItemAdapter.OnItemClickListener() {
                    @Override
                    public void onItemClick(int position) {
                        Log.d("Position: ", ""+position);
                        Intent intent = new Intent(Intent.ACTION_VIEW, titleArrays.get(position).getUri());
                        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                        startActivity(intent);
                    }
                });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM