Получить смс андроид приложение - PullRequest
0 голосов
/ 05 ноября 2019

У меня проблемы с настройкой приложения, которое будет получать SMS-сообщения. Дело в том, что когда я тестирую приложение с помощью эмулятора Android, отображается сообщение, но на физическом устройстве это не так. И сообщение отображается, и сообщение журнала отображается, только если приложение находится в ReceivedFragment. В противном случае нет никакого следа какого-либо сообщения.

Я попытался настроить его, как описано по этой ссылке: https://google -developer-training.github.io / android-developer-phone-sms-курс / урок% 202 / 2_p_2_sending_sms_messages.html

Я не получаю никаких положительных результатов, и я могу сказать, что я застрял ... Я понятия не имею, что может быть не так и что приводит к такого родаповедение приложения. Если кто-то может помочь, я был бы чрезвычайно признателен.

Вот классы, которые отвечают за обработку моих сообщений

Класс SMSReceiver

public class SMSReceiver extends BroadcastReceiver {

    public static final String SMS_TEXT = "SMS_TEXT";
    public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() == SMS_RECEIVED) {
            Bundle pdusBundle = intent.getExtras();
            Object[] pdus = (Object[]) pdusBundle.get("pdus");
            SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[0]);

            Intent broadcastSMS = new Intent();
            broadcastSMS.setAction("SMS_RECEIVED_ACTION");
            broadcastSMS.putExtra(SMS_TEXT, message.getMessageBody());
            context.sendBroadcast(broadcastSMS);
        }
    }
}

Полученный фрагмент

public class ReceivedFragment extends Fragment {


    public static ReceivedFragment newInstance() {
        return new ReceivedFragment();
    }

    private SMSReceiver broadcastIntent = new SMSReceiver();
    private SMSReceiver messageIntent;
    private TextView tvReceived;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View receivedView = inflater.inflate(R.layout.fragment_received, container, false);
        tvReceived = receivedView.findViewById(R.id.tv_received);

        messageIntent = new SMSReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                tvReceived.setText(intent.getStringExtra(SMSReceiver.SMS_TEXT));
            }
        };
        return receivedView;
    }

    @Override
    public void onStart() {
        super.onStart();

        IntentFilter telephonyIF = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
        IntentFilter actionIF = new IntentFilter("SMS_RECEIVED_ACTION");

        getActivity().registerReceiver(broadcastIntent, telephonyIF);
        getActivity().registerReceiver(messageIntent, actionIF);
    }

    @Override
    public void onStop() {
        super.onStop();
        getActivity().unregisterReceiver(broadcastIntent);
        getActivity().unregisterReceiver(messageIntent);
    }
}


И файл Android Manifest:


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

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

    <application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name=".AppService"
            android:enabled="true"
            android:exported="true" />

        <receiver
            android:name=".receivers.SMSReceiver"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.BROADCAST_SMS">
            <intent-filter android:priority="100">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
            </intent-filter>
        </receiver>

    </application>

</manifest>

Буду признателен, если кто-нибудь укажет, что я делаю не так с этим приложением. Заранее спасибо

...