短信和工作室权限问题

问题描述:

所以,我在android工作室有这个短信应用程序。第一次运行时,它弹出:编辑窗口询问权限,并发送短信。但后来它从不要求权限和SMS剂量发送。谁能帮我?短信和工作室权限问题

这是我的主要课程。

package com.example.xbhatti.sms4; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.app.Activity; 

import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.telephony.SmsManager; 

import android.util.Log; 
import android.view.Menu; 
import android.view.View; 

import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
private static final int MY_PERMISSIONS_REQUEST_SEND_SMS =0 ; 
Button sendBtn; 
EditText txtphoneNo; 
EditText txtMessage; 
String phoneNo; 
String message; 

@Override 
    public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_SEND_SMS: { 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       SmsManager smsManager = SmsManager.getDefault(); 
       smsManager.sendTextMessage(phoneNo, null, message, null, null); 
       Toast.makeText(getApplicationContext(), "SMS sent.", 
         Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(getApplicationContext(), 
         "SMS faild, please try again.", Toast.LENGTH_LONG).show(); 
       return; 
      } 
     } 
    } 

} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    sendBtn = (Button) findViewById(R.id.btnSendSMS); 
    txtphoneNo = (EditText) findViewById(R.id.editText); 
    txtMessage = (EditText) findViewById(R.id.editText2); 

    sendBtn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      sendSMSMessage(); 
     } 
    }); 
} 



protected void sendSMSMessage() { 
    phoneNo = txtphoneNo.getText().toString(); 
    message = txtMessage.getText().toString(); 

    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.SEND_SMS) 
      != PackageManager.PERMISSION_GRANTED) { 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.SEND_SMS)) { 
     } else { 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.SEND_SMS}, 
        MY_PERMISSIONS_REQUEST_SEND_SMS); 
     } 
    } 
} 


} 

,这是我的xml文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.xbhatti.sms4.MainActivity"> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Sending SMS Example" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:textSize="30dp" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Tutorials point " 
    android:textColor="#ff87ff09" 
    android:textSize="30dp" 
    android:layout_below="@+id/textView1" 
    android:layout_alignRight="@+id/imageButton" 
    android:layout_alignEnd="@+id/imageButton" /> 

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageButton" 
    android:layout_below="@+id/textView2" 
    android:layout_centerHorizontal="true" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/editText" 
    android:hint="Enter Phone Number" 
    android:phoneNumber="true" 
    android:textColorHint="@color/abc_primary_text_material_dark" 
    android:layout_below="@+id/imageButton" 
    android:layout_centerHorizontal="true" /> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/editText2" 
    android:layout_below="@+id/editText" 
    android:layout_alignLeft="@+id/editText" 
    android:layout_alignStart="@+id/editText" 
    android:textColorHint="@color/abc_primary_text_material_dark" 
    android:layout_alignRight="@+id/imageButton" 
    android:layout_alignEnd="@+id/imageButton" 
    android:hint="Enter SMS" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Send Sms" 
    android:id="@+id/btnSendSMS" 
    android:layout_below="@+id/editText2" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="48dp" /> 


</RelativeLayout> 

,这是我mainfest xml文件

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

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


<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    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> 

从SDK 23及以后,权限是必需的d,并且一旦被授予,他们将不再被要求。

因此,我认为这是你的问题。没有其他声明,如果权限已被授予这将是发送短信。

if (ContextCompat.checkSelfPermission(this, 
       Manifest.permission.SEND_SMS) 
       != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
        Manifest.permission.SEND_SMS)) { 
      } else { 
       ActivityCompat.requestPermissions(this, 
         new String[]{Manifest.permission.SEND_SMS}, 
         MY_PERMISSIONS_REQUEST_SEND_SMS); 
      } 
    } else { 
     SmsManager smsManager = SmsManager.getDefault(); 
     smsManager.sendTextMessage(phoneNo, null, message, null, null); 
     Toast.makeText(getApplicationContext(), "SMS sent.", 
        Toast.LENGTH_LONG).show(); 
    } 

参考 https://developer.android.com/guide/topics/permissions/requesting.html

+0

我在方法onRequest()中有一个else语句。我应该在哪里放置这段代码? – SRB

+0

如果你看到我的代码上面,你可以看到我已经有这个代码 – SRB

+0

我已经更新了我的答案,你可以检查它的代码是否有效。如果它确实起作用,那么您还需要在下面的SDK中检查它。 – Mabz

public boolean haveSendSMSPermission() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     if (getApplicationContext().checkSelfPermission(android.Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED) { 
      return true; 
     } else { 
      ActivityCompat.requestPermissions(getApplicationContext() , new String[]{Manifest.Manifest.permission.SEND_SMS}, 1); 
      return false; 
     } 
    }else { 
     return true; 
    } 
} 

只要使用此方法时,你的应用程序启动

+0

我正在此错误:ActivityCompat.requestPermissions(getApplicationContext(),新的String [] {Manifest.Manifest.permission.SEND_SMS},1); 我在这里变红。 – SRB

+0

如果你在片段,那么你有使用'getActivity()'而不是'getApplicationContex()' – Saim

+0

你知道是否有一种方法发送短信到几个数字吗? – SRB

的问题现在解决了。 我只是不得不补充。

    SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendTextMessage(phoneNo, null, message, null, null); 
      Toast.makeText(getApplicationContext(), "SMS sent.", 
        Toast.LENGTH_LONG).show(); 
在sendSMS()