У меня проблемы с настройкой приложения, которое будет получать 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>
Буду признателен, если кто-нибудь укажет, что я делаю не так с этим приложением. Заранее спасибо