2012-11-18 19 views
5

Natrafiam na dziwny problem, dostałem aplikację pozwalającą dowolnie zmieniać rozmiar czcionki na urządzeniu z Androidem (Font Size Setter). Używa introspekcji do wywoływania niektórych wewnętrznych apisów Androida. Aby wykonać to połączenie, potrzebne jest następujące zezwolenie: android.permission.CHANGE_CONFIGURATION. To działało jak amulet pod Androida 4.0 i do 4.2, gdzie już nie działa. Kopanie w logi Odkryłem, że nie mogę zaktualizować rozmiaru czcionki, ponieważ pomija to uprawnienie. Debbuging sprawdzić czynne uprawnienia, mam je podczas sprawdzania PackageInfo odpowiadający moim appAndroid 4.2 odfiltrowuje uprawnienie CHANGE_CONFIGURATION?

requestedPermissions = {java.lang.String[2]@830038778728} 
    [0] = {[email protected]}"android.permission.CHANGE_CONFIGURATION" 
    [1] = {[email protected]}"android.permission.WRITE_SETTINGS" 
requestedPermissionsFlags = {int[2]@830038779016} 
    [0] = 1 
    [1] = 3 

Czy ktoś dostał żadnego pojęcia o tym, co się dzieje, lub jakiegokolwiek obejścia pomysł? Wielkie dzięki za przeczytanie mi.

Na życzenie AndroidManifest.xml złożyć

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="fr.gatay.android.fss" 
      android:versionCode="1" 
      android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="14"/> 
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> 
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/> 
    <application android:label="@string/app_name" android:icon="@drawable/app_icon"> 
     <activity android:name=".MainActivity" 
     android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 
+0

będzie można wysłać plik Manifest – PearsonArtPhoto

+0

miałem ten sam problem na https://play.google.com/store/apps/details?id=com.wiirecords.localizedapps. Dodałem Android: maxSdkVersion = "16" do mojego manifestu, aby filtrować nowsze wersje Androida! – thiagolr

Odpowiedz

1

Przynajmniej w chwili obecnej, CHANGE_CONFIGURATION wymaga dla swojej aplikacji albo być podpisane przez firmware podpisaniu kluczem lub być zainstalowany na partycji systemowej. Możesz to zobaczyć, analizując the framework manifest, gdzie są zdefiniowane te uprawnienia.

+0

Dzięki, więc myślę, że to jest zmarłych z mojej aplikacji, jeśli nie mogę tego zrobić. Czy istnieje znane obejście tego problemu? –

+0

@CedricGatay: Well używasz "introspekcji do wywoływania niektórych wewnętrznych apisów Androida" - oczekiwanie, że będzie działać w różnych wydaniach, nie jest zbyt sensowne. Biorąc to pod uwagę, nie mam pojęcia, do czego konkretnie używałeś 'CHANGE_CONFIGURATION'. – CommonsWare

+0

zasadniczo używam 'IActivityManager # updatePersistentConfiguration', aby zaktualizować rozmiar czcionki, której powinien używać Android. Nie znalazłem innych sposobów, by to zrobić. Wolałbym jednak używać publicznego API. –

4

Poziom ochrony zgody CHANGE_CONFIGURATION została zmieniona na "System | podpis | rozwój" (v4.2) z "niebezpieczne" (v4.1 i poniżej), ponieważ Android v4.2

Wygląda na to, że W żadnym wypadku aplikacje 3-częściowe nie uzyskają pozwolenia CHANGE_CONFIGURATION na urządzeniach z Androidem 4.2+. :-(

3

Sprawdź ten post http://blog.sightidea.com/?p=44

Można poprosić użytkownika o przyznanie uprawnień do aplikacji z adb narzędzia:

>adb shell 
>pm grant com.yourapp.packagename android.permission.CHANGE_CONFIGURATION 
Powiązane problemy