我正在構建一個android應用程序,並且我想向當前用戶發送一條短信,然後使用BroadcastReceiver讀取此短信的內容。目前短信已成功發送,但我的BroadcastReceiver無法正常工作。 我沒有把正確的權限的manifest.xml:發送短信給自己並接收它
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
這裏是我的片段代碼:
public class GetOtpFragment extends Fragment {
private SMSReceiver mSMSreceiver;
private VerificationActivity mActivity;
private EditText mPhoneNumber;
private Button mVerifyButton;
public GetOtpFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = (VerificationActivity) getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_get_otp, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle b = getArguments();
mPhoneNumber = (EditText) view.findViewById(R.id.phone_number);
mVerifyButton = (Button) view.findViewById(R.id.verify_phone_number_button);
// I register my receiver
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
mSMSreceiver = new SMSReceiver();
mActivity.registerReceiver(mSMSreceiver, intentFilter);
// verify phone number
mVerifyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// this works
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(mPhoneNumber.getText().toString(), null, "test", null, null);
}
});
}
@Override
public void onStop() {
super.onStop();
mActivity.unregisterReceiver(mSMSreceiver);
}
}
我的廣播接收器:
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// never called
Toast.makeText(context, "SMS received", Toast.LENGTH_LONG);
Log.d("---- smsreceiver ---", "in smsreceiver");
}
}
所以就像我說的,短信真的發送,我可以在短信應用程序中找到它,但沒有通知。事情是我的接收器從來沒有被叫過,沒有日誌,也沒有烤麪包,我不知道爲什麼。是否因爲sendTextMessage
未創建任何通知?
「是否因爲sendTextMessage'不會產生任何通知?」 - 沒有任何'SmsManager'的方法創建'Notification's。應用程序本身負責發佈這些內容。如果你沒有在你的短信應用中禁用它們,你至少應該爲傳入的消息得到一個「通知」。你確定你有合適的號碼嗎?你能成功地發送自己的短信應用程序的消息嗎?您是否在短信應用中看到了傳出消息或傳入消息? Android的哪個版本以及您測試的是哪種設備? –
現在我正在使用android studio的虛擬設備。所以是的,當我發送消息時,沒有通知傳入的消息。但是當我進入短信應用程序後,消息真的在這裏。事情是我的BroadcastReceiver不會捕獲與'sendTextMessage'發送的短信,但抓住其他短信,我不明白。 – pchmn
如果您在短信應用程序中看到傳出的消息,那麼它正在發送,並且您正在API 4.4或更高版本上運行,因此無法中止「SMS_RECEIVED」廣播。這一點以及您沒有收到傳入消息或「通知」的事實很可能意味着您沒有發送到模擬器的正確編號。但我不確定模擬器是如何處理的,因爲我只在實際設備上測試短信。如果您的Receiver爲其他傳入消息工作,那麼我會說你可能沒問題。你可以在真實設備上測試發送給自己嗎? –