BroadcastReceiver,用于在基于 Samsung-Android 的智能手机上接收短信

Posted

技术标签:

【中文标题】BroadcastReceiver,用于在基于 Samsung-Android 的智能手机上接收短信【英文标题】:BroadcastReceiver for incoming SMS on Samsung-Android based smartphone 【发布时间】:2018-07-06 14:59:54 【问题描述】:

在发布此问题之前,我检查了每个 *** 帖子,因为它们没有帮助。 我正在使用此文档 https://developer.android.com/reference/android/provider/Telephony?hl=it 来了解如何构建一个侦听传入 SMS 的应用程序,但它似乎不适用于我的情况,以及所有 *** 帖子。

以下是我刚刚开发的: AndroidManifest.xml

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

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".IncomingSMS">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

MainActivity.java

package abc;

import android.Manifest;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActivityCompat.requestPermissions(this,new String[]Manifest.permission.SEND_SMS,1);
        ActivityCompat.requestPermissions(this,new String[]Manifest.permission.READ_SMS,2);
        ActivityCompat.requestPermissions(this,new String[]Manifest.permission.RECEIVE_SMS,3);
    

IncomingSMS.java

package abc;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class IncomingSMS extends BroadcastReceiver 
    @Override
    public void onReceive(Context context, Intent intent) 
        System.out.println("It works!");
    

很遗憾,当我收到一条新短信时,它没有写“It works!”

在那个网站上有这个部分:

注意:这些 API 并非在所有 Android 设备上都可用。

我要辞职了,我真的认为三星 Galaxy A5 2017 无法让我做我想做的事。 代码中是否有我忘记的内容,或者我真的无法在此手机上开发此应用程序?

【问题讨论】:

【参考方案1】:

终于经过两天的工作,我能够理解问题所在。如果您停用并重新启用 SMS 权限,问题就解决了。这显然是 Android Oreo 上的一个错误。

更好: 我修改了代码如下:

ActivityCompat.requestPermissions(this, new String[]Manifest.permission.SEND_SMS, Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_SMS,1);

【讨论】:

这个答案需要更高的排名。这就是金钱的答案。像 OP 一样,我浏览了与 BroadcastReceivers 和 SMS 阅读相关的每一个 SO 帖子。这个答案就是这样做的。我做了一个直接复制/粘贴,但我不是 100% 确定为什么会这样......所以我的下一步是深入挖掘。但感谢 OP 发布此内容。

以上是关于BroadcastReceiver,用于在基于 Samsung-Android 的智能手机上接收短信的主要内容,如果未能解决你的问题,请参考以下文章

BroadcastReceiver的实例----基于Service的音乐播放器之二

用于 Google 云消息传递客户端的 BroadcastReceiver 或 GCMBroadcastReceiver?

BroadcastReceiver 用于在收藏夹/注视中添加或删除联系人时收听

用于互联网连接的 Android BroadcastReceiver 调用了两次

Android BroadcastReceiver

Android BroadcastReceiver广播:基本使用