Чтение APN в Android 4.2?

У меня проблема с чтением APN в Android v4.2 (Да, чтение, а не запись APNS) , он бросает исключение безопасности:

Нет разрешения на запись настроек APN: ни пользователь 10068, ни текущий процесс не имеют android.permission.WRITE_APN_SETTINGS.

Тот же код, используемый для работы на всех предыдущих платформах, знает ли кто-нибудь об этом?

Благодаря!

4 Solutions collect form web for “Чтение APN в Android 4.2?”

Это представляется преднамеренным изменением. Git commit, где они добавили эту защиту, включает следующий комментарий:

Поскольку БД может содержать корпоративные пароли, мы должны ее обеспечить. Использование того же разрешения, что и запись в БД, поскольку чтение потенциально может нанести ущерб как запись.

Вполне возможно, что ваша проблема заставит их рассмотреть возможность добавления отдельного разрешения на чтение, но по крайней мере пока это регрессия в 4.2.

Если вы хотите прочитать APN для Android 4.2 и более, это изменение. Я тестировал и это работа.

В Android 4.1 и ниже используйте это:

 Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null); 

А для Android 4.2 и выше используйте этот код:

 private static final String[] APN_PROJECTION = { Telephony.Carriers.TYPE, // 0 Telephony.Carriers.MMSC, // 1 Telephony.Carriers.MMSPROXY, // 2 Telephony.Carriers.MMSPORT // 3 }; 

И эта строка:

 final Cursor apnCursor =SqliteWrapper.query(context, this.context.getContentResolver(), Uri.withAppendedPath(Carriers.CONTENT_URI, "current"), APN_PROJECTION, null, null, null); 

SQLiteWrapperClass скрыт (найден этот class в Интернете)

 import android.database.sqlite.SqliteWrapper; 

Мой английский не совсем хорош, извините за это.

Вы можете прочитать настройки по умолчанию из /etc/apns-conf.xml:

 private boolean getSettingsFromApnsFile(Context context, String apnName) { FileReader reader = null; boolean sawValidApn = false; try { reader = new FileReader("/etc/apns-conf.xml"); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(reader); TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); String simOperator = telephonyManager.getSimOperator(); if (TextUtils.isEmpty(simOperator)) { logger.warn("unable to get sim operator - so unable to get mms config"); return false; } int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("apn")) { HashMap attributes = new HashMap(); for (int i=0; i 

У меня тоже ситуация, мое решение не имеет доступа к android_assets в AsyncTask. « Удостоверьтесь, что только ваш основной stream имеет разрешение на доступ к вашему ресурсу активов dir »,

У меня возникла проблема, когда я кодирую следующее:

 @Override protected void onResume() { super.onResume(); //mWebView.loadUrl("file:///android_asset/95306.html"); new LoadUrlTask().execute("file:///android_asset/95306.html"); } ... class LoadUrlTask extends AsyncTask { // progressDialog = new ProgressDialog(LoadActivity.this); @Override protected String doInBackground(String... strings) { mWebView.loadUrl(strings[0]); return ""; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //progressDialog.dismiss(); } @Override protected void onPreExecute() { super.onPreExecute(); //progressDialog.setMessage("loading..."); //progressDialog.show(); } } 

и я исправляю это:

 @Override protected void onResume() { super.onResume(); mWebView.loadUrl("file:///android_asset/95306.html"); //new LoadUrlTask().execute("file:///android_asset/95306.html"); } 

надеюсь, что это поможет!

  • Вызов функции startActivity () извне контекста активности
  • Фатальный сигнал 11 (SIGSEGV) при 0x00000000 (код = 1) - PhoneGap
  • Как получить отправителя намерения?
  • Android getResources (). GetDrawable () устаревший API 22
  • Android: как автоматически перезапустить приложение после того, как оно было «принудительно закрыто»?
  • Одновременное использование нескольких AsyncTasks - невозможно?
  • Как сделать grid-view горизонтально прокручиваемым в android
  • Откройте изображение с помощью URI в средстве просмотра изображений галереи по умолчанию в Android
  • Как импортировать набор значков в проект Android Studio
  • Начать работу внутри onReceive BroadcastReceiver
  • Как я могу сделать что-то вроде FlowLayout в Android?
  • Interesting Posts

    Можно ли использовать DYLD_LIBRARY_PATH для Mac OS X? И каков алгоритм поиска динамической библиотеки?

    Как определить, какая программа создает определенный звук в Windows 7?

    Разница между LoadFile и LoadFrom с assemblyми .NET?

    Что означает cmd / C?

    Отключить Центр загрузки Microsoft Office

    Если я разблокирую жесткий диск, восстановит ли система его удаление?

    Как обеспечить анимацию при вызове другой активности в Android?

    Существуют ли какие-либо тесты, показывающие разницу между включенной / отключенной аппаратной виртуализацией?

    Почему мое DSL-соединение так медленно, когда мой сосед намного быстрее?

    Многострочные строки в JSON

    Java: что означает ~

    Что такое Классовая адресация?

    Adaptive segue в раскадровке Xcode 6. Неужели устал?

    Спреи «Air Duster» – они безопасны для оборудования?

    Не найдено ни одного приложения для журнала (log4j)?

    Давайте будем гением компьютера.