2016-05-22 6 views
0

私はアンドロイドアプリを構築しています。私は現在のユーザーにSMSを送信し、このSMSの内容をBroadcastReceiverで読んでみたいと思います。現時点では、smsは正常に送信されますが、私のBroadcastReceiverは機能しません。 私はmanifest.xmlに右権限を入れなかった。ここで自分宛にSMSを送って受信してください

<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"); 

    } 
} 

だから私が言ったように、 SMSは実際に送信され、私はSMSアプリでそれを見つけることができますが、通知はありません。事は、私の受取人は決して呼び出されず、ログもトーストもなく、私は理由を知らないということです。 sendTextMessageは通知を作成しないためですか?

+0

"sendTextMessageは通知を作成しないためですか?" - 'SmsManager'のメソッドのどれも' Notification'sを作成しません。アプリ自体はアプリを発行する責任があります。あなたがあなたのSMSアプリケーションでそれらを無効にしていないならば、あなたは少なくとも着信メッセージのための 'Notification'を得ているべきです。あなたは正しい番号を持っていますか?あなたは正常にあなた自身SMSアプリケーションからのメッセージを送ることができますか?あなたは、あなたのSMSアプリで発信メッセージ、または着信メッセージを見ていますか? Androidのどのバージョン、どの種類の端末を試していますか? –

+0

今、私はアンドロイドスタジオで仮想デバイスを使用しています。はい、メッセージを送信すると、着信メッセージの通知はありません。しかし、その後、私はSMSアプリケーションに入ると、メッセージは本当にここにあります。事は私のBroadcastReceiverは 'sendTextMessage'で送られたSMSを捕まえませんが、他のSMSを捕まえます、私は理解しません。 – pchmn

+0

SMSアプリケーションで送信メッセージが表示されている場合は送信されており、API 4.4以降で実行されているため、「SMS_RECEIVED」ブロードキャストを中止できません。これは、着信メッセージやその「通知」を受け取っていないという事実と共に、あなたがエミュレータの正しい番号に送信していないことを意味します。私は実際のデバイスでSMSだけをテストするので、エミュレータがそれをどのように処理するかはわかりません。あなたのレシーバーが他の着信メッセージのために働くならば、おそらくOKだと思います。実際のデバイスであなた自身に送信することをテストできますか? –

答えて

-1

プログラムで登録するのではなく、マニフェストのインテントに登録して、ブロードキャストを受信できるかどうかを確認してください。その場合はそれがうまくいかない場合は、いくつかの他のアプリはあなたが前に放送をキャッチし、それを消費するので、それはあるかもしれない

<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"を追加してみてくださいそのような意図フィルター:それは仕事をした場合

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

が、あなたはあなたが活動はSMSが戻って受信されるまで生きたままだ作り、registerReceiverに問題がある可能性があります。

+0

ありがとうございます。私はあなたが言ったようにマニフェストにレシーバを登録しようとしましたが、うまくいきませんでした。優先順位ではどちらもうまくいきませんでした。なぜああ? – pchmn

関連する問題