2016-12-27 5 views
0

Я пытаюсь отправить простой смс. Дело в том, что он работает над образцами, которые я загрузил из учебников. Но когда я пытаюсь воспроизвести тот же код, я получаю ошибку. Ниже приведен код, когда я пытался отлаживать.Android-менеджер SMS получает ошибку

D/ViewRootImpl: ViewPostImeInputStage processPointer 0 
D/ViewRootImpl: ViewPostImeInputStage processPointer 1 
W/System.err: java.lang.SecurityException: Sending SMS message: uid 10333 does not have android.permission.SEND_SMS. 
W/System.err:  at android.os.Parcel.readException(Parcel.java:1620) 
W/System.err:  at android.os.Parcel.readException(Parcel.java:1573) 
W/System.err:  at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:1577) 
W/System.err:  at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:380) 
W/System.err:  at android.telephony.SmsManager.sendTextMessage(SmsManager.java:333) 
W/System.err:  at com.creations.oreo.valletcall.MainActivity$1.onClick(MainActivity.java:40) 
W/System.err:  at android.view.View.performClick(View.java:5697) 
W/System.err:  at android.widget.TextView.performClick(TextView.java:10814) 
W/System.err:  at android.view.View$PerformClick.run(View.java:22526) 
W/System.err:  at android.os.Handler.handleCallback(Handler.java:739) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
W/System.err:  at android.os.Looper.loop(Looper.java:158) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:7229) 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
Disconnected from the target VM, address: 'localhost:8616', transport: 'socket' 

Я пытаюсь отлаживать путем подключения реального телефона и ошибки разрешения вероятно очевидные один из выше фактически уже определен в файле Android Manifest.

Мой MainActivity ниже

public class MainActivity extends AppCompatActivity { 

    Button buttonSend; 

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




     buttonSend = (Button) findViewById(R.id.buttonSend); 

     buttonSend.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 



       try { 

        /* Intent sendIntent = new Intent(Intent.ACTION_VIEW); 
        sendIntent.putExtra("sms_body", "default content"); 
        sendIntent.setType("vnd.android-dir/mms-sms"); 
        startActivity(sendIntent);*/ 

        SmsManager smsManager = SmsManager.getDefault(); 
        smsManager.sendTextMessage("91195525", null, "Test", null, null); 
        Toast.makeText(getApplicationContext(), "SMS Sent!", 
          Toast.LENGTH_LONG).show(); 


       } catch (Exception e) { 
        Toast.makeText(getApplicationContext(), 
          "SMS faild, please try again later SMS!", 
          Toast.LENGTH_LONG).show(); 
        e.printStackTrace(); 
       } 

      } 
     }); 


    } 
} 

Мой Android Manifest файл

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="18" /> 
    <uses-permission android:name="android.permission.SEND_SMS"/> 

    <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:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

В учебнике, например, я следую за это

http://www.mkyong.com/android/how-to-send-sms-message-in-android/

+2

Вы, кажется, не быть [реализации права доступа во время выполнения] (https://stackoverflow.com/questions/32635704/android-permission-doesnt- работа четного если-я-уже объявленная-его). В целом, сообщения в блоге почти 5 лет назад, скорее всего, устарели. – CommonsWare

+0

Да, я тоже то же самое, что они могут устареть, какие-то новые? Ты прав! Я думаю, что этот вопрос не должен даже быть опубликован. – JackyBoi

ответ

0

со ссылкой the official doc

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.SEND_SMS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.SEND_SMS)) { 

     // Show an explanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.SEND_SMS}, 
       MY_PERMISSIONS_REQUEST_SEND_SMS); 

     // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

И вы можете прочитать результат с

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_SEND_SMS: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

Таким образом, вы просите разрешений выполнения, теперь вам нужно implmeent эти методы, чтобы заставить их работать в вашем приложении.

Надеюсь, это поможет.


Примечание: другой способ для отправки смс через intents

+0

Tks для этого ... позволяет сказать, если я использую намерение, могу ли я пропустить получение разрешения явно? – JackyBoi

+0

[Ссылаясь на это старое информационное сообщение] (http://stackoverflow.com/a/9798870/4700782), вам не нужно это с помощью намерений, но не на 100% уверен –

+0

В любом случае, чтобы пропустить разрешение, ЕСЛИ я настойчив при использовании Менеджер SMS? – JackyBoi