TextToSpeech addSpeech (String key_string, String path) не работает [duplicate]

Проблема заключается в типах используемого монитора, монитора 4k и стандартного монитора. Chrome на сегодняшний день является самым умным, когда мы можем рассказать нам, что такое уровень масштабирования, используя window.devicePixelRatio, по-видимому, он может определить, что такое плотность пикселей и сообщает о том же номере, что важно.

Другие браузеры, не так много. IE и Edge, вероятно, являются самыми худшими, поскольку они значительно изменяют уровни масштабирования. Чтобы получить текст такого же размера на мониторе 4k, вам нужно выбрать 200% вместо 100% на стандартном мониторе.

По состоянию на май 2018 года, вот что мне нужно для определения уровней масштабирования для нескольких наиболее популярных браузеров, Chrome, Firefox и IE11. Я рассказываю, какой процент масштабирования. Для IE он сообщает 100% даже для 4k мониторов, которые на самом деле составляют 200%, но размер текста на самом деле тот же.

Вот скрипка: https://jsfiddle.net/ae1hdogr /

Если кто-то захочет взять удар в других браузерах и обновить скрипку, тогда, пожалуйста, сделайте это. Моя основная цель заключалась в том, чтобы охватить эти три браузера, чтобы определить, используют ли люди коэффициент масштабирования более 100% для использования моего веб-приложения и отображают уведомление о том, что коэффициент масштабирования арендодателя.

212
задан Peter Mortensen 30 November 2014 в 22:01
поделиться

22 ответа

215
ответ дан Community 22 August 2018 в 17:34
поделиться
217
ответ дан Community 5 November 2018 в 15:04
поделиться

Измените свойство разрешений в вашем /system/etc/permission/platform.xml, и группа должна указывать, как показано ниже.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
    <group android:gid="sdcard_rw" />
    <group android:gid="media_rw" />    
</uses-permission>
5
ответ дан AbdulMomen عبدالمؤمن 22 August 2018 в 17:34
поделиться
  • 1
    platform.xml заблокирован прямо вниз, пытаясь сделать это через оболочку adb, но нужен любой скрипт, который ADB позволит мне использовать для мод. – John 17 July 2014 в 01:45
  • 2
    спасибо, это полезно для меня. – wangzhengyi 24 April 2015 в 07:20
  • 3
    Я попробовал. Не работает – Gene 30 March 2016 в 15:27
  • 4
    Потерпеть неудачу. Поместите мое устройство в цикл загрузки. – Tobse 19 December 2016 в 07:58

В дополнение ко всем ответам, если клиенты используют Android 6.0, Android добавила новую модель разрешения для (Marshmallow).

Trick: Если вы настроили таргетинг на версию 22 или ниже, ваше приложение будет запрашивать все разрешения во время установки так же, как и на любом устройстве под управлением ОС под Marshmallow. Если вы пытаетесь на эмуляторе, а затем с android 6.0 вперед, вам нужно явно указать настройки -> apps-> YOURAPP -> и изменить разрешение, если вы дали какой-либо.

7
ответ дан Android_Rocks 22 August 2018 в 17:34
поделиться
  • 1
    Невероятно, я потратил 2 дня, пытаясь понять это. Каждый раз, когда я чувствую, что на Android работает нормально, происходит нечто подобное. – Jaime Ivan Cervantes 13 December 2016 в 16:01

Я испытываю то же самое. Я обнаружил, что если вы перейдете в «Настройки» -> «Диспетчер приложений» - «Приложение» -> «Разрешения» -> «Включить хранилище», он решает проблему.

8
ответ дан Atul Kaushik 22 August 2018 в 17:34
поделиться

Странно после того, как поместил косую черту «/» перед моей новой версией, моя проблема была решена. Я изменил это:

File myFile= new File(Environment.getExternalStorageDirectory() + "newFile");

на следующее:

File myFile= new File(Environment.getExternalStorageDirectory() + "/newFile");
4
ответ дан Darush 22 August 2018 в 17:34
поделиться
  • 1
    Здесь ничего странного. В первой строке вы пытаетесь создать файл в том же каталоге, что и тот, который содержит ваш внешний каталог хранилища. ie /storage/.../somethingnewfile вместо /storage/.../something/newfile – Stéphane 31 May 2017 в 07:46
  • 2
    @ Stéphane Ошибка сама по себе странна, если вы посмотрите на широкий диапазон ответов. – Darush 31 May 2017 в 08:54
  • 3
    Правильный способ сделать это - использовать конструктор File (dir, file) – Nick Cardoso 20 February 2018 в 09:29
  • 4
    @NickCardoso Вы также можете использовать File (String pathname). Похоже, вы здесь не поняли. Вопрос не в том, как использовать класс File. Ряд ответов в этом потоке показывает, как вводить в заблуждение эту ошибку и сколько возможных путей ее решения. В моем случае ошибкой был недостающий косой чертой. Некоторые люди считают это полезным. Конечно, вы можете использовать свой собственный метод доступа к файлу. Продолжайте и отправляйте свой ответ. Это может решить чью-то проблему. – Darush 20 February 2018 в 09:39
  • 5
    Вы не понимаете. Если вы используете правильный конструктор, ваш хак не требуется. Мой комментарий добавлен, поэтому он может помочь любым будущим читателям ввести в заблуждение вашу ошибку. Это не была личная критика и не требовала ответа – Nick Cardoso 20 February 2018 в 09:58

Добавить зависимости градиента

implementation 'com.karumi:dexter:4.2.0'

Добавьте в свой основной код код.

import com.karumi.dexter.Dexter;
import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {


                checkMermission();
            }
        }, 4000);
    }

    private void checkMermission(){
        Dexter.withActivity(this)
                .withPermissions(
                        android.Manifest.permission.READ_EXTERNAL_STORAGE,
                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        android.Manifest.permission.ACCESS_NETWORK_STATE,
                        Manifest.permission.INTERNET
                ).withListener(new MultiplePermissionsListener() {
            @Override
            public void onPermissionsChecked(MultiplePermissionsReport report) {
                if (report.isAnyPermissionPermanentlyDenied()){
                    checkMermission();
                } else if (report.areAllPermissionsGranted()){
                    // copy some things
                } else {
                    checkMermission();
                }

            }
            @Override
            public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                token.continuePermissionRequest();
            }
        }).check();
    }
0
ответ дан ethemsulan 22 August 2018 в 17:34
поделиться

Добавить разрешение в манифест.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
1
ответ дан Harman Khera 22 August 2018 в 17:34
поделиться

Возможно, ответ таков:

на устройствах API> = 23, если вы устанавливаете приложение (приложение не является системным приложением), вы должны проверить разрешение на хранение в «Настройках - приложениях», есть список разрешений для каждого приложения, вы должны его проверить! попробуйте

2
ответ дан Jason Zhu 22 August 2018 в 17:34
поделиться

Я создаю папку под / data / в моем init.rc (сбрасывая с помощью aosp на Nexus 7) и имел именно эту проблему.

Оказалось, что предоставление папки rw (666) ) было недостаточно, и это должно было быть rwx (777), тогда все это сработало!

2
ответ дан lane 22 August 2018 в 17:34
поделиться

Я ожидал бы, что все ниже /data будут принадлежать «внутреннему хранилищу». Однако вы должны написать /sdcard.

5
ответ дан ovenror 22 August 2018 в 17:34
поделиться
  • 1
    Я попробовал & lt; uses-permission android: name = & quot; android.permission.WRITE_INTERNAL_STORAGE & quot; / & GT; слишком. все тот же. – Mert 13 January 2012 в 19:32
  • 2
    Раздел / data-partition обычно защищен от записи обычным (не root) пользователям, которые пытаются обычным доступом к файлам. Для внутреннего хранилища существуют специальные методы, особенно если вы хотите получить доступ к базам данных. Страница для разработчиков Android должна помочь вам в этой проблеме. – ovenror 13 January 2012 в 19:37

Когда ваше приложение принадлежит системному приложению, оно не может получить доступ к SD-карте.

54
ответ дан Peter Mortensen 22 August 2018 в 17:34
поделиться
  • 1
    Никогда не поздно. Ваш вклад был решением моей проблемы. Благодаря! – AlanKley 20 April 2013 в 01:35
  • 2
    Кажется, вы правы, но с Android 2 это разрешено. – Hola Soy Edu Feliz Navidad 18 May 2013 в 14:52
  • 3
    никогда не думал об этом, пока я не прочитал ваш комментарий, исправил проблему. – fuzzy dunlop 25 March 2014 в 13:29
  • 4
    Спасибо, человек, хотя я запросил разрешения у пользователя во время выполнения. Эта ошибка возникла в эмуляторе. – Sharp Edge 11 September 2016 в 22:57
  • 5
    Черт возьми, я просто провел около 3 часов. Кроме того, мне пришлось перезагрузить устройство, и это действительно сработало. огромное спасибо – crgarridos 3 October 2016 в 15:10
  • 6
    Когда я подключаю устройство Samsung Galaxy S6, он сначала дает опцию «Разрешить доступ к данным устройства». с "DENY" или "ALLOW" а также из панели уведомлений. Я получаю возможность Использовать USB для 1. MTP 2. PTP 3. MIDI-устройства 4. Зарядка. Какой из них выбрать? – testsingh 13 November 2016 в 20:58
  • 7
    работал и на меня. Но почему это работает? какая разница не связана с USB-ПК. – user13107 9 May 2017 в 06:35
  • 8
    Хороший вопрос. Я никогда не исследовал это дальше. Я предполагаю, что с момента подключения устройства есть блокировка записи, поэтому он может эмулировать устройство USB на вашем компьютере. Возможно, это во избежание непоследовательных данных. Не уверен, хотя. – Tobias Reich 9 May 2017 в 08:12
  • 9
    – user13107 9 May 2017 в 08:21

Моя проблема была в «TargetApi (23)», которая необходима, если ваш minSdkVersion приведен ниже 23.

Итак, у меня есть разрешение на запрос со следующим фрагментом

protected boolean shouldAskPermissions() {
    return (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
}

@TargetApi(23)
protected void askPermissions() {
    String[] permissions = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"
    };
    int requestCode = 200;
    requestPermissions(permissions, requestCode);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
// ...
    if (shouldAskPermissions()) {
        askPermissions();
    }
}
24
ответ дан Piroxiljin 22 August 2018 в 17:34
поделиться

Для API 23+ вам необходимо запросить разрешения на чтение и запись, даже если они уже находятся в вашем манифесте.

// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

/**
 * Checks if the app has permission to write to device storage
 *
 * If the app does not has permission then the user will be prompted to grant permissions
 *
 * @param activity
 */
public static void verifyStoragePermissions(Activity activity) {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}

AndroidManifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Для официальных документацию о запросах разрешений для API 23+, проверьте https://developer.android.com/training/permissions/requesting.html

293
ответ дан Raphael Royer-Rivard 22 August 2018 в 17:34
поделиться
  • 1
    Чтобы уточнить, для того, чтобы это сработало, действие должно обрабатывать ответ запроса разрешений на активность. Подробнее см. В developer.android.com/training/permissions/… . – kldavis4 4 December 2015 в 20:31
  • 2
    Спасибо за это. Я застрял уже 2 дня, и это решило! – Paul Alexander 8 December 2015 в 15:16
  • 3
    разве это не плохо? в отношении удобства пользователей. – M. Usman Khan 11 December 2015 в 13:03
  • 4
    Но где его использовать? например, если я хочу сделать снимок, мне нужно запустить verifyStoragePermissions до startActivityForResult или atActivityResult? это меня действительно смущает. – Kiwi Lee 4 April 2016 в 11:07
  • 5
    Спасибо, что решите мою проблему. просто примечание: если кто-то не может решить «Manifest.permission & quot; вам просто нужно импортировать и импортировать android.Manifest & quot ;. – Oubaida AlQuraan 12 July 2016 в 09:56

У меня была такая же ошибка при попытке записать изображение в папке DCIM / camera на Galaxy S5 (android 6.0.1), и я понял, что только эта папка ограничена. Я просто мог писать в DCIM / любую папку, но не в камеру. Это должно быть ограничение / настройка на основе бренда.

4
ответ дан RayaFeed 22 August 2018 в 17:34
поделиться

после добавления разрешения решила мою проблему

<uses-permission android:name="android.permission.INTERNET"/>
0
ответ дан saigopi 22 August 2018 в 17:34
поделиться

Применять разрешения хранилища post 6.0 можно обойти, если у вас есть корневое устройство через эти команды adb:

root@msm8996:/ # getenforce
getenforce
Enforcing
root@msm8996:/ # setenforce 0
setenforce 0
root@msm8996:/ # getenforce
getenforce
Permissive
2
ответ дан Sergey Brunov 22 August 2018 в 17:34
поделиться

Основываясь на ответе user462990

Чтобы получать уведомление, когда пользователь отвечает на диалог запроса разрешения, используйте это: (код в kotlin)

override fun onRequestPermissionsResult(requestCode: Int,
                           permissions: Array<String>, grantResults: IntArray) {
when (requestCode) {
    MY_PERMISSIONS_REQUEST_READ_CONTACTS -> {
        // If request is cancelled, the result arrays are empty.
        if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {

            // permission was granted, yay! Do the
            // contacts-related task you need to do.

        } else {

            // permission denied, boo! Disable the
            // functionality that depends on this permission.

        }
        return
    }

    // Add other 'when' lines to check for other
    // permissions this app might request.

    else -> {
        // Ignore all other requests.
    }
}

}

0
ответ дан user3561494 22 August 2018 в 17:34
поделиться

В моем случае я использовал библиотеку выбора файлов , которая вернула путь к внешнему хранилищу, но началась с /root/. И даже с разрешением WRITE_EXTERNAL_STORAGE , предоставленным во время выполнения, я все еще получил ошибку EACCES (Permission denied). Поэтому используйте Environment.getExternalStorageDirectory(), чтобы получить правильный путь к внешнему хранилищу.

Пример: Невозможно записать: /root/storage/emulated/0/newfile.txt Можно написать: /storage/emulated/0/newfile.txt

boolean externalStorageWritable = isExternalStorageWritable();
File file = new File(filePath);
boolean canWrite = file.canWrite();
boolean isFile = file.isFile();
long usableSpace = file.getUsableSpace();

Log.d(TAG, "externalStorageWritable: " + externalStorageWritable);
Log.d(TAG, "filePath: " + filePath);
Log.d(TAG, "canWrite: " + canWrite);
Log.d(TAG, "isFile: " + isFile);
Log.d(TAG, "usableSpace: " + usableSpace);

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

Выход 1:

externalStorageWritable: true
filePath: /root/storage/emulated/0/newfile.txt
isFile: false
usableSpace: 0

Выход 2:

externalStorageWritable: true
filePath: /storage/emulated/0/newfile.txt
isFile: true
usableSpace: 1331007488
3
ответ дан vovahost 22 August 2018 в 17:34
поделиться
  • 1
    У меня была такая же точная проблема. Удаление части root с пути разрешило мою проблему. – avidProgrammer 30 November 2017 в 17:29

У меня была та же проблема на Samsung Galaxy Note 3, на которой запущен CM 12.1. Проблема для меня заключалась в том, что у меня был

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18"/>

, и мне пришлось использовать его для хранения и хранения фотографий пользователей. Когда я попытался загрузить те же фотографии в ImageLoader, я получил ошибку (Permission denied). Решение заключалось в том, чтобы явно добавить

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

, поскольку указанное выше разрешение ограничивает только разрешение на запись до версии API версии 18 и с ним разрешение на чтение.

13
ответ дан ZooS 22 August 2018 в 17:34
поделиться
56
ответ дан Peter Mortensen 5 November 2018 в 15:04
поделиться
56
ответ дан Peter Mortensen 5 November 2018 в 15:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: