Android Studio双向短信常驻(Java&Kotlin)

储备知识

类书写以及事件监听

在这里插入图片描述

Activity

四种状态

在这里插入图片描述关闭Activity

finish();

Service

1.创建Service
在这里插入图片描述2.代码区点击右键
在这里插入图片描述在这里插入图片描述
按住ctrl
在这里插入图片描述
3.声明写在onCreate()里面,方法实现写在onStartCommand里面
4.new Thread(new Runnable)
在这里插入图片描述在这里插入图片描述

在run里面写实现的方法,后面加上.start()
补充:此Service与Activity无联系
5.在MainActivity里创建Intent对象,然后startService(intent)

代码:

public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(new Runnable() {
            @Override
            public void run() {

            }
        }).start();
        return super.onStartCommand(intent, flags, startId);
    }
Button bt = findViewById(R.id.button);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,MyService.class);
                startService(intent);
            }

        });

BroadcastReceiver

发送广播

//Intent intent2 = new Intent();//注意此处使用无参构造会接收不到,未探究
Intent intent = new Intent(MainActivity.this,MyReceiver.class);
intent2.setAction("Intent对融");
sendBroadcast(intent2);

接收广播

1.创建一个继承BroadcastReceiver的类
在这里插入图片描述2.在onReceive中接收广播

public class MyReceiver extends BroadcastReceiver {
    private static final String ACTION_1="cast1";
    private static final String ACTION_2="cast2";
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        if(intent.getAction().equals(ACTION_1)){
            Toast.makeText(context, "动作1广播接收成功", Toast.LENGTH_SHORT).show();
        }
        else if(intent.getAction().equals(ACTION_2)){
            Toast.makeText(context, "动作2广播接收成功", Toast.LENGTH_SHORT).show();
        }

    }
}

3.对Intent进行过滤

<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="动作1"/>
                <action android:name="动作2"/>
            </intent-filter>
        </receiver>

基础结束,下面正式开始

大作业内容

运用Service和Receiver设计并实现一个应用程序:在Activity里启动系统后台服务,并在启动服务后关闭Activity,接着在操作系统中运行监控,直到手机收到短信之后,判断短信内容里是否有设计好的关键字,一旦发现关键字,则回复短信给发信人,进而达到自动回复的功能。要求在模拟器或真实Android设备上实现此应用程序。

1.创建项目,本次以Kotlin为主

2.创建按钮

activity-button
黄色感叹号,设置resource_value的值为启动服务
在MainActivity里创建按钮
设置按钮监听

val bt = findViewById<Button>(R.id.button)
        bt.setOnClickListener {
            
        }

3.创建Service

重写OnCreat和onStartCommand

4.创建广播(Java)

先定义收到短信的事件

private static final String SMS_RECEIVER_ACTION = "android.provider.Telephony.SMS_RECEIVED";

之后OnReceive里写事件·处理程序
完全代码:

package com.example.zhoujinmin;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.widget.Toast;

class MessageReciever extends BroadcastReceiver {

    private static final String SMS_RECEIVER_ACTION = "android.provider.Telephony.SMS_RECEIVED";
    private String sign = "Re";//检测恢复内容
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        StringBuilder sBuilder = new StringBuilder();
        StringBuilder sBuilder2 = new StringBuilder();
        SmsManager manager= SmsManager.getDefault();
        if(SMS_RECEIVER_ACTION.equals(intent.getAction()))
        {
            Bundle bundle = intent.getExtras();
            if(null != bundle)
            {
                Object[] pdus = (Object[])bundle.get("pdus");
                SmsMessage[] messages = new SmsMessage[pdus.length];
                for(int i = 0; i < messages.length; ++i)
                {
                    messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                }
                for(SmsMessage msg : messages)
                {
                    sBuilder.append(msg.getDisplayOriginatingAddress());
                    sBuilder2.append(msg.getDisplayMessageBody());
                }
            }
        }
        Toast.makeText(context, "吆喝,快看!! 您收到了一条短信!!\n" + sBuilder.toString(), Toast.LENGTH_LONG).show();

        if (sBuilder2.toString().indexOf(sign) != -1)
            manager.sendTextMessage(sBuilder.toString(),null,"收到",null,null);
    }
}

5.在Service里添加广播

class MyService : Service() {
    var mes:MessageReceiver = MessageReceiver();
    override fun onBind(intent: Intent): IBinder {
        TODO("Return the communication channel to the service.")
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {

        return super.onStartCommand(intent, flags, startId)
    }

    override fun onCreate() {
        val filter = IntentFilter("android.provider.Telephony.SMS_RECEIVED")
        registerReceiver(mes, filter)
        super.onCreate()
    }
}

6.Main里Button启动服务,退出Activity

package com.example.zhoujinmin

import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val intent = Intent(this@MainActivity, MyService::class.java)
        val bt = findViewById<Button>(R.id.button)
        bt.setOnClickListener {
            startService(intent)
            finish()
        }
    }
}

7.添加权限

    <!-- 接收消息 -->
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> <!-- 发送消息 -->
    <uses-permission android:name="android.permission.SEND_SMS" /> <!-- 阅读消息 -->
    <uses-permission android:name="android.permission.READ_SMS" /> <!-- 写入消息 -->
    <uses-permission android:name="android.permission.WRITE_SMS" />

8.手机授权

在这里插入图片描述

9.启动两个模拟器

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在下面可以看到他们的端口号
在这里插入图片描述

10.测试

在这里插入图片描述
在这里插入图片描述
测试成功

原代码

可以私信我
或者去下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 当开发 Android 应用程序时,您可以使用 JavaKotlin 作为主要编程语言。Android Studio 是一个流行的集成开发环境 (IDE),可以用于编写和调试 Android 应用程序。 JavaAndroid 开发的传统编程语言。它是一种面向对象编程语言,可以在 Android 平台上创建高性能和可靠的应用程序。Java 支持 Android 应用程序的所有功能,包括多线程处理、网络通信、图像处理等。 Kotlin 是一种相对较新的编程语言,由 JetBrains 开发。它是一种静态类型语言,与 Java 兼容,并且可以完全取代 JavaKotlin 具有更简洁、更安全和更易于理解的语法,可加快应用程序开发的速度。 在 Android Studio 中使用 JavaKotlin 编写代码时,您可以使用 Android Studio 提供的各种工具和插件来简化代码编写和调试过程。无论您选择使用哪种语言,都应该选择适合您应用程序需求的最佳编程语言。 ### 回答2: Android Studio是一个非常流行的开发工具,它能够帮助开发人员为Android平台创建高质量的应用程序。在使用Android Studio时,您可以使用JavaKotlin编写您的应用程序。不过,从Java代码转换到Kotlin代码可能会为您带来一些好处。 在Android Studio中,将Java转换为Kotlin非常简单。只需要单击菜单栏中的Code选项,然后选择Convert Java File to Kotlin File选项。此时会出现一个转换向导,它会自动将Java代码转换为Kotlin代码。 从JavaKotlin的转换可能会带来一些好处。首先,Kotlin代码更加简洁。Kotlin可以通过更少的代码来实现与Java相同的功能。由于Kotlin采用了更现代的编程模式,因此其API更为简洁,并提供了更好的可读性。 Kotlin还可以提高开发效率。Kotlin具有更好的可空性,这意味着开发人员无需担心空指针异常。此外,Kotlin的语言结构更加灵活,它可以更好地适应开发人员的工作流程。 Kotlin还可以使您的代码更加安全。由于其类型安全,Kotlin可以在编译时发现更多的错误,从而减少运行时错误。 总之,将Java代码转换为Kotlin代码可能会为您的应用程序带来许多好处。虽然转换可能需要一些时间和精力,但它可以显著提高您的开发效率并带来更稳定的应用程序。 ### 回答3: 随着 Kotlin 语言的不断普及和广泛使用,很多开发者在已有的 Android 代码中逐渐引入 Kotlin 语言,因为 Kotlin 语言有着更少的模板代码、支持 null 安全等重要特点,使得代码更加鲁棒且更加简单易读。于是,Android Studio 为了方便开发人员可以尽快的将 Java 代码转化为 Kotlin,提供了一个简单的方法来实现 JavaKotlin 的自动转换。本文将详细介绍如何使用 Android StudioKotlin 代码转换功能,在保证代码完整性的前提下,将 Java 代码转换为 Kotlin 代码。 在 Android Studio 的工程中,右键点击需要转换的 Java 类,选择 Convert Java file to Kotlin file,将会弹出一个对话框,让你选择需要转换的选项。在这个窗口中,你可以选择自动转换或手动转换。自动转换会尝试直接将 Java 代码转换为 Kotlin,但是可能会出现一些不完全的情况,所以还是建议使用手动转换来检查和修改代码以确保 Kotlin 代码的完整性。手动转换需要逐行阅读 Java 代码并将其转换为 Kotlin 代码,请注意 JavaKotlin 之间的些许差异和细节问题。 对于比较简单的代码片段,手动转换起来会非常容易,这也是 Kotlin 的一个重要特点。对于一些复杂的代码,如果使用自动转换,则需要检查和修改 Kotlin 代码以确保代码的正确性和完整性。另外,还有一些重要的注意事项需要考虑:比如函数参数的兼容性、Lambda 表达式的使用,类属性、方法、异常等的继承规则等。 在实际应用中,我们还需要结合项目实际情况根据需要进行代码转换,逐步将 Java 代码优化为 Kotlin 代码。该过程中,需要逐行检查和修改代码,确保代码的正确性,同时也需要注意 Kotlin 的一些特殊语法和定义规则。 总的来说,Kotlin 转换是将 Java 代码转换为 Kotlin 代码的常见操作之一,这样的转换可以让开发人员更加方便快捷地使用 Kotlin的特性,提高代码质量和开发效率。同时,理解 Kotlin 语言与 Java 语言的相似之处和不同之处也是非常重要的。这样可以让我们更好的编写代码,更好的组织结构和功能,提升项目的维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值