簡體   English   中英

發送短信給自己並接收

[英]Send SMS to self and receive it

我正在構建一個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);
    }
}

還有我的BroadcastReceiver:

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不會創建任何通知嗎?

嘗試按照清單上的意圖進行注冊,而不是通過編程進行注冊,然后查看您是否能夠接收廣播。

<receiver
    android:name="com.example.SMSReceiver"
    android:permission="android.permission.BROADCAST_SMS">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>

如果這不起作用,則可能是因為其他一些應用程序在您開始之前就捕獲了廣播,並使用了它(因為SMS_RECEIVED廣播是有序廣播),在這種情況下,請嘗試將android:priority="2147483000"到該意圖中-filter像這樣:

    <intent-filter android:priority="2147483000">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>

如果它確實有效,則可能是registerReceiver出現問題,請確保您的活動保持實時狀態,直到收到短信為止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM