2016-01-08 2 views
0

Я прорыл каждую форму, и каждый ответ - ничего не работает. Я просто пытаюсь отправить сообщение SMS через SMSManager, но он продолжает давать ошибкуSmsManager не работает с разрешениями, независимо от того, что я делаю

java.lang.SecurityException: Sending SMS message: uid 10059 does not have android.permission.SEND_SMS. 

Но мой манифест установлен правильно, я установить разрешения для SMS в соответствии с требованиями:

манифеста Класс : -

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.jake.test4"> 

    <uses-permission android:name="android.permission.SEND_SMS"/> 



    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity 

      android:exported="true" 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       android:exported="true" 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Но все равно это не сработает!

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

Мой полный Java здесь:

package com.example.jake.test4; 

     import android.app.Activity; 
     import android.content.Intent; 
     import android.net.Uri; 
     import android.os.Bundle; 
     import android.support.design.widget.FloatingActionButton; 
     import android.support.design.widget.Snackbar; 
     import android.telephony.SmsManager; 
     import android.view.View; 
     import android.view.View.OnClickListener; 
     import android.widget.Button; 
     import android.widget.EditText; 
     import android.widget.Toast; 
     import java.io.File; 

    public class MainActivity extends Activity { 

    String phoneNumber = new String("5556"); 
    String smsBody = new String("You just received an SMS!"); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 

     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(findViewById(android.R.id.content), "Sending SMS!", Snackbar.LENGTH_LONG) 
         .show(); 

       sendSmsByManager(); 
      } 

     }); 
    } 

    public void sendSmsByManager() { 
     try { 
      // Get the default instance of the SmsManager 
      SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendTextMessage(phoneNumber, 
        null, 
        smsBody, 
        null, 
        null); 
      Toast.makeText(getApplicationContext(), "Your sms has successfully sent!", 
        Toast.LENGTH_LONG).show(); 
     } catch (Exception ex) { 
      Toast.makeText(getApplicationContext(),"Your sms has failed...", 
        Toast.LENGTH_LONG).show(); 
      ex.printStackTrace(); 
     } 
    } 
    } 

Должно быть так же просто, как отправка текстового сообщения .... может кто-то пожалуйста, помогите мне?

ответ

0

добавить это поле в вашей деятельности

final private int REQUEST_CODE_ASK_PERMISSIONS = 123; 

добавить в вашей фабрике onClickListener

int hasWriteContactsPermission = 0; 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       hasWriteContactsPermission = checkSelfPermission(Manifest.permission.SEND_SMS); 
      } 
      if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        if (!shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS)) { 
         showMessageOKCancel("You need to allow access to send sms", 
           new DialogInterface.OnClickListener() { 
            @Override 
            public void onClick(DialogInterface dialog, int which) { 
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
              requestPermissions(new String[]{Manifest.permission.SEND_SMS}, 
                REQUEST_CODE_ASK_PERMISSIONS); 
             } 
            } 
           }); 
         return; 
        } 
       } 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        requestPermissions(new String[]{Manifest.permission.SEND_SMS}, 
          REQUEST_CODE_ASK_PERMISSIONS); 
       } 
       return; 
      } 
      // your code to send sms 
      // sendSmsByManager(); 

добавить эти два метода в вашей деятельности

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE_ASK_PERMISSIONS: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // Permission Granted 
      } else { 
       // Permission Denied 
       Toast.makeText(MainActivity.this, "Send SMS Denied", Toast.LENGTH_SHORT) 
         .show(); 
      } 
      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) { 
    new AlertDialog.Builder(MainActivity.this) 
      .setMessage(message) 
      .setPositiveButton("OK", okListener) 
      .setNegativeButton("Cancel", null) 
      .create() 
      .show(); 
} 
Смежные вопросы