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 用于在收藏夹/注视中添加或删除联系人时收听