2017-05-08 133 views
-1

所以,我在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> 

回答

0

從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

0
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

0

的問題現在解決了。 我只是不得不補充。

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