вне приложения через ClipData.Item.getUri () - PullRequest
0 голосов
/ 08 марта 2019

Моя версия API - 24

Я использую камеру и Bluetooth. И мое устройство связывается с другим устройством.

Первая функция: я собираюсь вызвать приложение камеры из моего приложения, сделать снимок и отправить его на другое устройство.

Вторая функция - я хочу импортировать файл, который я хочу отправить, и отправить его на другое устройство через Bluetooth.

Эти два могут выполняться в разных проектах, но два не могут быть выполнены в одном проекте.

это моя ошибка "Причина: android.os.FileUriExposedException: file: ///sdcard/Download/example.txt, доступная за пределами приложения через ClipData.Item.getUri ()"

Я вставлю кусок кода.

CameraActivity.class

private void sendTakePhotoIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
        }

        if (photoFile != null) {
            photoUri = FileProvider.getUriForFile(this, getPackageName(), photoFile);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);

        }
    }
}

Bluetooth.class

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == DISCOVER_DURATION && requestCode == REQUEST_BLU) {
        Intent i = new Intent();
        i.setAction(Intent.ACTION_SEND);
        i.setType("*/*");
        File file = new File(exist);

        i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));

        PackageManager pm = getPackageManager();
        List<ResolveInfo> list = pm.queryIntentActivities(i, 0);
        if (list.size() > 0) {
            String packageName = null;
            String className = null;
            boolean found = false;

            for (ResolveInfo info : list) {
                packageName = info.activityInfo.packageName;
                if (packageName.equals("com.android.bluetooth")) {
                    className = info.activityInfo.name;
                    found = true;
                    break;
                }
            }

            if (!found) {
                Toast.makeText(this, "Bluetooth not been found", Toast.LENGTH_LONG).show();
            } else {
                i.setClassName(packageName, className);
                startActivity(i);
            }
        }
    } else {
        Toast.makeText(this, "Bluetooth is cancelled", Toast.LENGTH_LONG).show();
    }
}

Manifests.xml - поставщик

<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.tech.www.communicatever_110"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

Рез / XML / file_paths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="my_images" path="Android/data/com.tech.www.communicatever_110/files/Pictures" />

Если вам нужен еще код, пожалуйста, запросите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...