Android-Berechtigung funktioniert nicht, auch wenn ich es erklärt
Ich versuche, code zu schreiben, senden Sie eine SMS von einem Android-app, aber wenn ich versuche, die SMS zu senden schickt er mir wieder den Fehler:
09-17 18:37:29.974 12847-12847/**.**.****E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: **.**.****, PID: 12847
java.lang.SecurityException: Sending SMS message: uid 10092 does not have android.permission.SEND_SMS.
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:768)
at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:310)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:293)
at **.**.****.MainActivity$3.onClick(MainActivity.java:70)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Habe ich überprüft, aber ich habe die Berechtigungen in der manifest-Datei, wie folgt:
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-feature android:name="android.hardware.telephony"
android:required="true"/>
<application
android:exported="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Ich im internet gesucht, aber alle die Fehler wurden über die <uses-permission/>
syntax, könnten Sie mir bitte helfen?
Welche version von Android sind Sie testen?
Ich Teste auf android 6.0
sicherlich wird es funktionieren auf eine nachstehend version von android. Es ist eine neue Philosophie von Berechtigungen in android 6.0
Gibt es eine spezielle syntax für android 6 ? Wie kann ich sicher sein, dass es funktioniert auf unten version ?
meine bisherigen
Ich Teste auf android 6.0
sicherlich wird es funktionieren auf eine nachstehend version von android. Es ist eine neue Philosophie von Berechtigungen in android 6.0
Gibt es eine spezielle syntax für android 6 ? Wie kann ich sicher sein, dass es funktioniert auf unten version ?
meine bisherigen
targetsdkversion
war 23
aktualisiert 27
nach app-update READ_SMS
Erlaubnis nicht arbeiten, die ist bereits aktiviert. bitte helfenInformationsquelleAutor Nathan Loudjani | 2015-09-17
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
(das folgende ist ein Auszug aus ein blog-Beitrag von mir über dieses)
Dem großen Grund für die nicht immer Ihre Berechtigung, heutzutage ist da
Ihr Projekt hat eine
targetSdkVersion
von 23 oder höher, und die ErlaubnisSie fordern, ist "gefährlich". In Android 6.0, dies beinhaltet:
ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
ADD_VOICEMAIL
BODY_SENSORS
CALL_PHONE
CAMERA
GET_ACCOUNTS
PROCESS_OUTGOING_CALLS
READ_CALENDAR
READ_CALL_LOG
READ_CELL_BROADCASTS
READ_CONTACTS
READ_EXTERNAL_STORAGE
READ_PHONE_STATE
READ_SMS
RECEIVE_MMS
RECEIVE_SMS
RECEIVE_WAP_PUSH
RECORD_AUDIO
SEND_SMS
USE_SIP
WRITE_CALENDAR
WRITE_CALL_LOG
WRITE_CONTACTS
WRITE_EXTERNAL_STORAGE
Für diese Berechtigungen, nicht nur, dass Ihre
targetSdkVersion
23+ appmüssen die
<uses-permission>
element(s), aber Sie haben auchzu bitten, für die Berechtigungen zur Laufzeit vom Benutzer auf Android 6.0+
Geräte, mit Methoden wie
checkSelfPermission()
undrequestPermissions()
.Als vorübergehende Lösung, lassen Sie Ihre
targetSdkVersion
unter 23.Jedoch, schließlich, Sie haben aus irgendeinem Grund, wollen Sie Ihren
targetSdkVersion
23 oder höher. Zu dieser Zeit, müssen Siepassen Sie Ihre app zur Nutzung der neuen runtime permission-system.
Die Android-Dokumentation
eine Seite, die diesem Thema gewidmet.
Okay, ich habe versucht, dies vor, aber konnte nicht die ContextCompat.checkSelfPermission und ActivityCompat.requestPermissions Methoden, Sie geben mir ein 'not found' - Fehler auf die Methode Namen. Ich vermute, es ist zu tun mit einer fehlenden Bibliothek, es scheint in v4-Paket, sondern meine nur, gradle Abhängigkeit
compile 'com.android.support:appcompat-v7:22.2.1'
. Sollte ich dies ändern und v4?Sie brauchen, um auf eine v23 generation des support-Bibliotheken (
23.x.y
, für die aktuellen Werte von x und y), anstatt die v22, die Sie derzeit verwenden.Danke, für die Zukunft, denke ich. Jetzt wechselte ich das Ziel wieder auf v22 und obwohl SD-Karte-Speicher wurde auf 200 MB auf dem emulator, es gab mir die SD-Karte nicht gemountet Fehler. Aber dann Verband ich mein Handy im developer-Modus und alles funktioniert. Für einige Grund-SD-Karte Speicher funktioniert auf dem emulator ausgeführt v23 aber nicht v22.
Würden Sie bitte teilen Sie Ihre code, der dies implementiert? Ich bin in der exakt gleichen Boot und kämpfen bin daran, diese in meine Tätigkeit.
InformationsquelleAutor CommonsWare
Oben genannten API-level 23 erhalten Sie programmatisch pragmatisch wie:
InformationsquelleAutor user7176550
Erlaubnis bitten, pragmatisch (nach API 23)
"Wenn die app die Berechtigung, die Methode checkSelfPermission() gibt PERMISSION_GRANTED, und die app kann die operation fortgesetzt werden soll.
Wenn die app nicht über die Berechtigung, die Methode gibt PERMISSION_DENIED, und die app hat explizit bitten Sie den Benutzer um Erlaubnis. Sie müssen den Benutzer auffordern, die Berechtigung, wie Sie im obigen code. Aufruf requestPermissions() öffnet einen standard-Android-dialog, die Sie nicht anpassen können."
InformationsquelleAutor Dan Alboteanu
Wenn Sie sdk-23 oder höher, dann müssen Sie überprüfen Laufzeit Berechtigungen.
InformationsquelleAutor Dharmendra Pratap
wenn Sie erklären
permisson
imManifest
und es ist nicht Arbeit bedeutet, Sie sind darstellende Aufgabe inMarshMallow
und fürMarshMallow
Sie gesetzt haben Permisson beiRunTime
.gerne auf diese Weise
InformationsquelleAutor Ironman
Gehen Sie bitte über den link unten
https://developer.android.com/guide/topics/permissions/overview.html
Einige Proben sind auch verfügbar, es zu bekommen, beginnen Sie mit den Berechtigungen.
Machen android sicherer jetzt Entwickler hat zu erwähnen permission im manifest so gut wie Sie sollten, Fragen Sie den Benutzer, als auch im Lauf der Zeit um die Arbeit zu erledigen. Sie sind die Erlaubnis kategorisiert in gefährlichen Genehmigung Abschnitt die Erwähnung unten
KALENDER
KAMERA
KONTAKTE
LAGE
MIKROFON
TELEFON
SENSOREN
SMS
LAGERUNG
InformationsquelleAutor Rishabh Saxena
Fügte ich diese zu meiner MainActivity, die lösen mein problem
InformationsquelleAutor Masquitos
Wenn Sie verwenden Android-version "23" oder "23+", dann die app zeigt Ihnen Fehler, wenn Sie versuchen, Zugriff auf alles, was erfordert Erlaubnis des Benutzers. Sie haben zu bitten, für die Berechtigungen zur Laufzeit, selbst wenn Sie erklärt haben, diese Berechtigungen im Android-manifest.
Prüfen: https://developer.android.com/training/permissions/requesting.html
Aber wenn Sie haben Ihre gesamte Anwendung und nicht ändern möchten, an jedem Ort, dann ein wenig betrügen ausreichend sein wird.
Gehen Sie zu "Erstellen.gradle" - Datei und ändern Sie die target-Sdk-version, weniger als 23 wie 22, 21.
InformationsquelleAutor Zohaib Hassan
Zusammen mit CommonsWare Antwort,
Ist eine Sicherheits-Einstellung (ich überprüft, CM13), um SMS-Nachricht zu Begrenzen. Wenn Sie diese Einstellung auf "None", OS wird ein popup-Dialog für jede SMS, auch nach Erhalt SMS_SEND-Berechtigung in der Laufzeit. Beste Sache ist, um das maximum.
Wenn die maximale ist nicht genug, es gibt Möglichkeiten, erhöht die maximale übertragungsrate auf einem gerooteten Gerät.
InformationsquelleAutor Dumi Jay
Können Sie diesen code verwenden, um den Zugriff auf Ihre Nachrichten
Öffnen Sie ein Dialogfeld mit dem folgenden code:
Holen Sie sich die Tätigkeit Ergebnis wie folgt:
oder Bearbeiten der Datei
build.gradle
und chanche AnzahltargetSdkVersion
weniger als23
Und brauchen nicht mehr den code oben
HINWEIS
Natürlich ist dies nicht der Fall, und es ist nur eine pädagogische Aspekt
InformationsquelleAutor Amirhf
Also musste ich eine app erstellen, um Nachrichten senden und empfangen, aber das senden von Aktion abgestürzt, wenn ich klickte auf senden, auch wenn die Erlaubnis erteilt wurde . Ich hatte angeforderten Berechtigungen für die Laufzeit und erlaubt Ihnen, noch Stand ich vor einem Absturz, dass der Prozess nicht den die Genehmigung beantragt, um SMS zu senden .
Ich hatte überprüft die Berechtigungen von :
Reihenfolge der Anfrage für Berechtigungen war
Ich rückgängig gemacht, die Reihenfolge der Anfrage, und es funktioniert gut . Getestet wurde dies mit einem komplett neuen app - (deinstallieren-> Installation -> testen). Die Antwort mag seltsam scheinen, aber nur give it a shot .
(Wenn es funktioniert in der gezeigten Weise in einer bestimmten Reihenfolge, dann ist Android vielleicht ein bug!!)
InformationsquelleAutor Partha Sarathi Murmu
Ich hoffe, die Lösung zu schreiben auf externe Speichermedien nützlich zu
InformationsquelleAutor SergeyUr