2016-04-14 13 views
0

Ich habe eine Android-Anwendung, die ich brauche, SMS zu empfangen und ich fand eine gewisse Tutorial, das lehrt, wie das zu tun, aber wenn ich es & betreibe ich bekommen android Erlaubnis AusnahmeAndroid: java.lang.SecurityException: Permission Denial:

Schwerwiegende Ausnahme: main Prozess: androidreceivesms.javapapers.com.smsbroadcastreceiver, PID: java.lang.RuntimeException: Kann nicht Aktivität ComponentInfo starten {androidreceivesms.javapapers.com.smsbroadcastreceiver/androidreceivesms.javapapers.com .smsbroadcastceiver.SmsActivity}: java.lang.SecurityException: Berechtigungsverweigerung: Lesen com.android.providers.telephony.SmsProvider uri content: // sms/inbox von pid = 12206, uid = 10061 erfordert android.permission.READ_SMS oder grantUriPermission() bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2416) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) unter android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java .lang.reflect.Method.invoke (Native Methode) um com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit .java: 616) Verursacht von: java.lang.SecurityException: Berechtigungsverweigerung: lesen com.android.providers.telephony.SmsProvider uri content: // sms/inbox von pid = 12206, uid = 10061 erfordert android.permiss ion.READ_SMS oder grantUriPermission() bei android.os.Parcel.readException (Parcel.java:1599) bei android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:183) bei android.database.DatabaseUtils .readExceptionFromParcel (DatabaseUtils.java:135) bei android.content.ContentProviderProxy.query (ContentProviderNative.java:421) bei android.content.ContentResolver.query (ContentResolver.java:491) bei android.content.ContentResolver. Abfrage (ContentResolver.java:434) bei androidreceivesms.javapapers.com.smsbroadcastreceiver.SmsActivity.refreshSmsInbox (SmsActivity.java:52) bei androidreceivesms.javapapers.com.smsbroadcastreceiver.SmsActivity.onCreate (SmsActivity.java:47) bei android.app.Activity.performCreate (Activity.java:6237) bei android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2369) bei android.app.ActivityThread. handleLaunchActivity (ActivityThread).java: 2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) bei android.os.Handler.dispatchMessage (Handler. java: 102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (Native Methode) um com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 726) bei com.androi d.internal.os.ZygoteInit.main (ZygoteInit.java:616)

Hier ist meine AndroidManifest.xml Datei:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".SmsActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name=".SmsBroadcastReceiver" android:exported="true" > 
     <intent-filter android:priority="999" > 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application> 

Hier ist meine SmsActivity.java

public class SmsActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { 

private static SmsActivity inst; 
ArrayList<String> smsMessagesList = new ArrayList<String>(); 
ListView smsListView; 
ArrayAdapter arrayAdapter; 

public static SmsActivity instance() { 
    return inst; 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    inst = this; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sms); 
    smsListView = (ListView) findViewById(R.id.SMSList); 
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, smsMessagesList); 
    smsListView.setAdapter(arrayAdapter); 
    smsListView.setOnItemClickListener(this); 

    refreshSmsInbox(); 
} 

public void refreshSmsInbox() { 
    ContentResolver contentResolver = getContentResolver(); 
    Cursor smsInboxCursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null, null, null); 
    int indexBody = smsInboxCursor.getColumnIndex("body"); 
    int indexAddress = smsInboxCursor.getColumnIndex("address"); 
    if (indexBody < 0 || !smsInboxCursor.moveToFirst()) return; 
    arrayAdapter.clear(); 
    do { 
     String str = "SMS From: " + smsInboxCursor.getString(indexAddress) + 
       "\n" + smsInboxCursor.getString(indexBody) + "\n"; 
     arrayAdapter.add(str); 
    } while (smsInboxCursor.moveToNext()); 
} 

public void updateList(final String smsMessage) { 
    arrayAdapter.insert(smsMessage, 0); 
    arrayAdapter.notifyDataSetChanged(); 
} 

public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { 
    try { 
     String[] smsMessages = smsMessagesList.get(pos).split("\n"); 
     String address = smsMessages[0]; 
     String smsMessage = ""; 
     for (int i = 1; i < smsMessages.length; ++i) { 
      smsMessage += smsMessages[i]; 
     } 

     String smsMessageStr = address + "\n"; 
     smsMessageStr += smsMessage; 
     Toast.makeText(this, smsMessageStr, Toast.LENGTH_SHORT).show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

Hier ist meine SmsBroadcastReceiver.java

public class SmsBroadcastReceiver extends BroadcastReceiver { 
public static final String SMS_BUNDLE = "pdus"; 

public void onReceive(Context context, Intent intent) { 
    Bundle intentExtras = intent.getExtras(); 
    if (intentExtras != null) { 
     Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); 
     String smsMessageStr = ""; 
     for (int i = 0; i < sms.length; ++i) { 
      SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); 

      String smsBody = smsMessage.getMessageBody().toString(); 
      String address = smsMessage.getOriginatingAddress(); 

      smsMessageStr += "SMS From: " + address + "\n"; 
      smsMessageStr += smsBody + "\n"; 
     } 
     Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show(); 

     //this will update the UI with message 
     SmsActivity inst = SmsActivity.instance(); 
     inst.updateList(smsMessageStr); 
    } 
} 

}

Kann jemand bitte helfen Sie mir, weil ich jetzt für eine lange Zeit Stapel hier gewesen sein? Jede Hilfe wird dankbar sein, danke

+0

führen Sie es auf Marshmallow? – Gautam

+0

Wenn Sie unter KitKat ausgeführt werden, sind die Berechtigungsprobleme, auf die sich die Antworten beziehen, nicht das Problem. Sie gelten nur für Geräte mit Marshmallow. Sind Sie sicher, dass sich das Manifest im Ordner '/ src' befindet? –

+0

Ich bin es auf Marshmallow, tut mir leid, ich habe nicht sorgfältig geprüft – Nyerere

Antwort

2

Sieht aus wie seine weil neue Berechtigungssystem in Android 6 versuchen Sie es mit sms vor der Arbeit zu verwenden

if(ContextCompat.checkSelfPermission(getBaseContext(), "android.permission.READ_SMS") == PackageManager.PERMISSION_GRANTED) {} 

und diese, wenn Sie Berechtigungen nicht

ActivityCompat.requestPermissions(SmsActivity.this, new String[]{"android.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS); 

Ich hoffe, das hilft

+0

Bitte helfen Sie mir, wo genau ich die obige Checkpermission setzen muss – Nyerere

+0

Von welchem ​​Paket kommt die UnlockActivity.this bse es scheint es zu lösen es mit Importen – Nyerere

+0

Und auch können Sie mir mit REQUEST_CODE_ASK_PERMISSIONS bse es kann nicht sein gelöst von dem Code über – Nyerere

0

Wenn Sie es auf Marshmallow ausführen, müssen Sie die Berechtigung zum Lesen der SMS zur Laufzeit anfordern.

Hier ist der offizielle doc: http://developer.android.com/training/permissions/requesting.html

Sie haben die Erlaubnis, mit ContextCompat.checkSelfPermission Funktion zu überprüfen. Dann, wenn Sie nicht über die Berechtigung,

Anfrage es über ActivityCompat.requestPermissions Methode und implementieren

public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) Methode die Benutzer Ergebnisse zu erhalten.

+0

Kannst du mir mehr dabei helfen, weil ich immer noch auf dieser Seite stecke? Kannst du mir dabei helfen, aus dem obigen Code, den ich gepostet habe? Ich meine, wie man dies auf meinem Code implementiert – Nyerere

+0

hast du deine Antwort bekommen? oder brauchst du mehr Hilfe? – user4057066

Verwandte Themen