在移动互联网的时代中,短信服务重要性不言而喻。很多时候,我们在使用手机时,由于种种原因将无法及时查看到一条重要的短信。为了能够及时从短信的信息中获益,我们可以使用短信自动转发app。下面,将介绍关于短信自动转发的原理以及详细制作过程。
1. 短信自动转发app原理
短信自动转发app的原理非常简单。它的工作基于手机上的短信监听服务,它会侦听每一条接收到的短信,并将其推送到你所设定的接收目标。
转发的工作流程如下:
1.1 程序监听所有接收到的短信,并通过消息广播机制将短信传递到指定的转发服务。
1.2 转发服务接收到短信后,解析出短信信息及接收号码。
1.3 根据用户设置的号码,发送短信到指定的接收方。同时,转发服务也会将短信存储到本地数据库中供用户查询。
2. 短信自动转发app制作过程
制作一款短信自动转发app,前提是你具备一定的编程知识。下面是具体的步骤:
2.1 程序运行权限申请
在应用开发中,获取权限的方法是固定的,但是在运行时,用户可以选择授予或拒绝该权限。需要先在 AndroidManifest.xml 文件中声明权限(如读取短信、发送短信、读取联系人、读取电话状态),然后在 app 运行时申请权限。权限请求代码如下:
```
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.READ_SMS)) {
} else {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_SMS},
REQUEST_CODE_READ_SMS);
}
}
```
2.2 短信接收消息广播
Android 中使用 BroadcastReceiver 操作广播的注册和发布。你对于接收和处理短消息的需求可以通过广播机制来实现:
```
public class SmsReceiver extends BroadcastReceiver {
private static final String TAG = SmsReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
if (SmsMessageReceiver.ACTION_SMS_RECEIVED.equals(intent.getAction())) {
Object [] pdus = (Object[]) intent.getExtras().get("pdus");
assert pdus != null;
SmsMessage[] smsMessages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
smsMessages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
String number = getSmsNumber(smsMessages);
String message = getSmsMessage(smsMessages);
sendSms(context, number, message);
}
}
private String getSmsNumber(SmsMessage[] smsMessages) {
StringBuilder builder = new StringBuilder();
for (SmsMessage smsMessage : smsMessages) {
builder.append(smsMessage.getOriginatingAddress());
}
return builder.toString();
}
private String getSmsMessage(SmsMessage[] smsMessages) {
StringBuilder builder = new StringBuilder();
for (SmsMessage smsMessage : smsMessages) {
builder.append(smsMessage.getMessageBody());
}
return builder.toString();
}
private void sendSms(Context context, String number, String message) {
Intent intent = new Intent(context, SmsService.class);
intent.putExtra(Sender.KEY_RECEIVER_NUMBER, number);
intent.putExtra(Sender.KEY_MESSAGE, message);
context.startService(intent);
}
}
```
在 Manifest.xml 中添加广播注册:
```
```
2.3 短信发送服务
在应用中,需要提供一个服务以便在短信接收完毕后发送消息。以下是一个简单的短信发送服务:
```
public class SmsService extends Service {
private static final String TAG = SmsService.class.getSimpleName();
private Sender mSender;
@Override
public void onCreate() {
super.onCreate();
mSender = new Sender();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
mSender.send(this, intent);
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
```
2.4 短信发送器
该类主要封装了发送短信的过程。getClass() + getMethod() 的方法获取了短信管理器的实例,然后通过 SmsManager 的 sendTextMessage() 方法发送短信:
```
public class Sender {
public static final String KEY_RECEIVER_NUMBER = "receiver_number";
public static final String KEY_MESSAGE = "message";
public boolean send(Context context, Intent intent) {
String number = intent.getStringExtra(KEY_RECEIVER_NUMBER);
String message = intent.getStringExtra(KEY_MESSAGE);
if (!TextUtils.isEmpty(number) && !TextUtils.isEmpty(message)) {
try {
SmsManager smsManager = SmsManager.getDefault();
ArrayList
int messageCount = dividedMessages.size();
ArrayList
ArrayList
for (int i = 0; i < messageCount; i++) {
Intent sentIntent = new Intent(SmsReceiver.ACTION_SMS_SENT);
sentIntent.putExtra(Sender.KEY_MESSAGE, message);
sentIntent.putExtra(Sender.KEY_NUMBER, number);
PendingIntent sentPendingIntent = PendingIntent.getBroadcast(context, 0, sentIntent, 0);
Intent deliveredIntent = new Intent(SmsReceiver.ACTION_SMS_DELIVERED);
deliveredIntent.putExtra(Sender.KEY_MESSAGE, message);
deliveredIntent.putExtra(Sender.KEY_NUMBER, number);
PendingIntent deliveredPendingIntent = PendingIntent.getBroadcast(context, 0, deliveredIntent, 0);
sentPendingIntents.add(sentPendingIntent);
deliveredPendingIntents.add(deliveredPendingIntent);
}
smsManager.sendMultipartTextMessage(number, null, dividedMessages, sentPendingIntents, deliveredPendingIntents);
return true;
} catch (Exception e) {
Log.e(TAG, "send failed", e);
}
}
return false;
}
}
```
3. 总结
以上是短信自动转发app的制作过程。它可供用户在需要的时候自动转发手机收到的短信。这款应用程序不仅易于制作,而且非常实用。我们可以根据自己的需要进行调整和修改,将其运用到其他领域中。