Saya mencoba menulis kode untuk mengirim SMS dari aplikasi Android, tetapi ketika saya mencoba mengirim SMS itu mengirim saya kembali kesalahan:
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)
Saya memeriksa tetapi saya memiliki izin dalam manifes, sebagai berikut:
<?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>
Saya mencari di internet tetapi semua kesalahannya tentang <uses-permission/>
sintaksis, bisakah Anda membantu saya?
java
android
android-permissions
Nathan Loudjani
sumber
sumber
targetsdkversion
telah23
diperbarui untuk27
setelah update aplikasiREAD_SMS
izin tidak bekerja yang sudah diaktifkan. tolong bantuJawaban:
(berikut ini diambil dari posting blog saya tentang ini )
Alasan utama untuk tidak mendapatkan izin Anda saat ini adalah karena proyek Anda memiliki
targetSdkVersion
23 atau lebih tinggi, dan izin yang Anda minta itu "berbahaya". Di Android 6.0, ini termasuk: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
Untuk izin ini, tidak hanya
targetSdkVersion
aplikasi 23+ Anda perlu memiliki<uses-permission>
elemen, tetapi Anda juga harus meminta izin tersebut saat runtime dari pengguna di perangkat Android 6.0+, menggunakan metode seperticheckSelfPermission()
danrequestPermissions()
.Sebagai solusi sementara, jatuhkan di
targetSdkVersion
bawah 23.Namun, pada akhirnya, Anda akan memiliki beberapa alasan untuk menginginkan Anda
targetSdkVersion
menjadi 23 atau lebih tinggi. Pada saat itu, Anda perlu menyesuaikan aplikasi Anda untuk menggunakan sistem izin runtime baru. Dokumentasi Android memiliki halaman yang didedikasikan untuk topik ini .sumber
compile 'com.android.support:appcompat-v7:22.2.1'
. Haruskah saya mengubahnya ke v4?23.x.y
, untuk nilai x dan y saat ini), daripada v22 yang saat ini Anda gunakan.Di atas API level 23 Anda akan diberikan secara pragmatis seperti:
sumber
meminta izin secara pragmatis (setelah API 23)
"Jika aplikasi memiliki izin, metode checkSelfPermission () mengembalikan PERMISSION_GRANTED, dan aplikasi dapat melanjutkan operasi.
Jika aplikasi tidak memiliki izin, metode mengembalikan PERMISSION_DENIED, dan aplikasi harus secara eksplisit meminta izin kepada pengguna. Anda harus meminta izin kepada pengguna, seperti yang ditunjukkan dalam kode di atas. Memanggil requestPermissions () menampilkan dialog Android standar, yang tidak dapat Anda sesuaikan. "
sumber
Jika Anda menggunakan SDK 23 atau lebih tinggi maka Anda harus memeriksa izin run time.
sumber
ketika Anda menyatakan
permisson
dalamManifest
dan itu tidak berarti pekerjaan Anda melakukan tugas diMarshMallow
dan untukMarshMallow
Anda telah menetapkan permisson diRunTime
.seperti ini
sumber
Silakan buka tautan di bawah ini, https://developer.android.com/guide/topics/permissions/overview.html
Beberapa sampel juga tersedia di sana untuk memulai dengan izin.
Untuk membuat android lebih aman sekarang pengembang harus menyebutkan izin dalam manifes serta mereka harus meminta pengguna juga dalam menjalankan waktu untuk menyelesaikan pekerjaan. Izin tersebut dikategorikan dalam bagian izin berbahaya yang disebutkan di bawah ini
KALENDER
KAMERA
KONTAK
LOKASI
MIKROPON
TELEPON
SENSOR
SMS
PENYIMPANAN
sumber
Saya menambahkan ini ke MainActivity saya, yang menyelesaikan masalah saya
sumber
Jika Anda menggunakan versi Android "23" atau "23+", maka aplikasi akan menunjukkan kesalahan ketika Anda mencoba mengakses apa pun yang memerlukan izin pengguna. Anda harus meminta izin saat run-time walaupun Anda telah menyatakan izin tersebut dalam manifes Android.
Periksa ini: https://developer.android.com/training/permissions/requesting.html
Tetapi jika Anda telah membuat seluruh aplikasi Anda dan tidak ingin berubah di setiap tempat maka sedikit cheat akan cukup.
Buka file "Build.gradle" dan ubah versi Sdk target menjadi kurang dari 23, seperti 22, 21.
sumber
Bersamaan dengan jawaban CommonsWare,
Ada Pengaturan Keamanan (saya memeriksa CM13) untuk mengatur Batas Pesan SMS. Jika Anda mengatur ini ke "Tidak Ada", OS akan memunculkan Dialog untuk setiap SMS, bahkan setelah mendapatkan izin SMS_SEND di saat runtime. Hal terbaik adalah mengatur ini ke maksimum.
Jika maksimum tidak cukup, ada cara untuk meningkatkan tingkat maksimum pada perangkat yang di-rooting.
sumber
Anda dapat menggunakan kode ini untuk mengakses pesan Anda
Buka Dialog menggunakan kode di bawah ini:
Dapatkan hasil Aktivitas seperti di bawah ini:
atau edit file
build.gradle
dan nomor chanchetargetSdkVersion
kurang dari23
Dan tidak perlu lagi kode di atas
CATATAN
Tentu saja ini tidak terjadi, dan itu hanya aspek pendidikan
sumber
Jadi saya harus membuat aplikasi untuk mengirim dan menerima pesan tetapi tindakan pengiriman terhenti setiap kali saya mengklik kirim meskipun izin diberikan. Saya telah meminta izin runtime dan memperbolehkannya, masih saya menghadapi crash bahwa proses tidak memiliki izin yang diminta untuk mengirim SMS. Saya telah memeriksa izin yang diberikan dari:
Urutan permintaan saya untuk izin adalah
Saya mengembalikan urutan permintaan dan berfungsi dengan baik. Ini diuji dengan aplikasi baru yang lengkap (uninstall-> install -> test). Jawabannya mungkin tampak aneh tetapi coba saja.
(Jika berfungsi dengan cara yang ditunjukkan dalam urutan tertentu, maka Android mungkin memiliki bug !!)
sumber
Saya harap solusi untuk menulis ke penyimpanan eksternal akan bermanfaat juga
sumber
Daftar Semua Izin Dapat Ditemukan dengan Penjelasan di
Manifest.permission
sumber