我已经弄明白了如何发送和接收短信.要发送短信,我必须调用该类的sendTextMessage()
和sendMultipartTextMessage()
方法SmsManager
.要接收SMS消息,我必须在AndroidMainfest.xml
文件中注册接收器.然后我不得不重写onReceive()
方法BroadcastReceiver
.我在下面列举了一些例子.
MainActivity.java
public class MainActivity extends Activity {
private static String SENT = "SMS_SENT";
private static String DELIVERED = "SMS_DELIVERED";
private static int MAX_SMS_MESSAGE_LENGTH = 160;
// ---sends an SMS message to another device---
public static void sendSMS(String phoneNumber, String message) {
PendingIntent piSent = PendingIntent.getBroadcast(mContext, 0, new Intent(SENT), 0);
PendingIntent piDelivered = PendingIntent.getBroadcast(mContext, 0,new Intent(DELIVERED), 0);
SmsManager smsManager = SmsManager.getDefault();
int length = message.length();
if(length > MAX_SMS_MESSAGE_LENGTH) …
Run Code Online (Sandbox Code Playgroud) 我刚刚收到了Hangouts 2.0的更新,已安装并启用了SMS
→ Turn on SMS
.现在我的应用程序在Android 4.3下运行,无法再接收短信,即我的BroadcastReceiver for SMS_RECEIVED
不再被调用.:-(
只要我Turn on SMS
在环聊2.0中禁用,我的应用就可以再次接收SMS_RECEIVED意图.
广播接收器在此类清单中注册
AndroidManifest.xml中
…
<receiver android:name=".SMSReceiver" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
…
Run Code Online (Sandbox Code Playgroud)
SMSReceiver.java
public class SMSReceiver extends BroadcastReceiver {
private static final Log LOG = Log.getLog();
@Override
public void onReceive(Context context, Intent intent) {
LOG.d("onReceive");
…
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将接收器的优先级更改为INT_MAX或999,这是intent-filter文档中可能的最高优先级,但没有成功.我知道SMS_RECEIVED
意图是有序发送的,高优先级的应用程序有能力中止广播.1但是,Hangouts 2.0似乎不太可能SMS_RECEIVED
以高优先级注册接收器并调用abortBroadcast()
,因此阻止任何其他应用程序接收意图.
更令我困惑的是,即使将Hangouts 2.0作为默认短信应用,我的Pebble仍然可以接收短信.我想知道Pebble的不同之处是什么?我刚刚注意到,我的Pebble上的传入短信通知不再是Pebble应用程序收到的新短信通知,而是由收到传入短信的环聊引起的"新环聊消息"通知.所以Pebble应用程序也无法接收传入的短信SMS_RECEIVED
.
在旁注而且与此问题没有真正关联,因为我仍然在Android 4.3(但我的应用程序针对SDK级别19,Android 4.4以防万一)Google的Android开发者博客文章关于Kitkat中 …
我正在尝试编写一个试图接收SMS消息并处理它们的简单应用程序.我已经按照了几个教程,但是我无处可去,当我向模拟器发送短信时,Intent似乎永远不会被解雇.
这是我的意图:
package com.neocodenetworks.smsfwd;
import android.content.*;
import android.os.Bundle;
import android.telephony.*;
import android.util.Log;
public class SmsReciever extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "smsfwd";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Intent recieved: " + intent.getAction());
if (intent.getAction() == SMS_RECEIVED) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[])bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) { …
Run Code Online (Sandbox Code Playgroud) 我有这个方法
public void GetSMS(){
//in this method I read SMS in my app inbox,
//If have new SMS create notification
}
Run Code Online (Sandbox Code Playgroud)
对于这个我认为创建计时器滴答方法和每5秒调用GetSMS()
如何为此创建正确的方法?
我正在尝试使用以下代码阅读收到的短信,它在API级别23下工作,但在API级别23 createFromPdu
方法已弃用.在谷歌文档中它有一个替代方法,但我如何使用它.
public class IncomingSms extends BroadcastReceiver {
// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the intent.
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = currentMessage.getDisplayOriginatingAddress();
String senderNum = phoneNumber; …
Run Code Online (Sandbox Code Playgroud) android android-sdk-tools smsmanager android-studio android-6.0-marshmallow
我是android和java的新手.我正在尝试使应用程序执行以下任务.
目前我有一张地图,我可以展示一个点,我已经实现了一个广播接收器,以获得形式的短信和经度.
但我不确定如何在接收新短信时从广播接收器更新地图.
任何帮助或提示都会很有用.
谢谢
android google-maps-api-3 android-intent android-layout mapactivity
甚至没有调用Log.d.找不到错误.我看过Android - 短信广播接收器,Android - 收听传入短信.我一直在寻找解决方案,持续24小时左右.请看看并告诉我哪里错了.
没有异常被抛出.SmsListener
在我的包文件夹中,放置所有其他活动.
更新添加android:enabled="true"
到接收器.然后也没工作.
我有我的清单:
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<receiver android:name=".SmsListener" android:exported="false">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
SmsListener.Java代码:
public class SmsListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(MainActivity.TAG,
"in Receiver. intent.getAction():" + intent.getAction());
if (intent.getAction()
.equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle bundle = intent.getExtras(); // ---get the SMS message passed
// in---
SmsMessage[] msgs = null;
String msg_from;
if …
Run Code Online (Sandbox Code Playgroud)