当前位置: 首页 > 编程日记 > 正文

Android 趣味应用—— 短信编辑器

修改短信数据库,从而生成任意手机号发送的短信。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.dudon.fakesms"><uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.WRITE_SMS" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"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></application></manifest>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="短信发送者:"android:textSize="18sp" /><EditTextandroid:id="@+id/get_phone"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="7"android:inputType="phone" /></LinearLayout><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"><EditTextandroid:id="@+id/get_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:hint="短信内容" /></ScrollView><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/get_time"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:text="添加当前时间" /><Buttonandroid:id="@+id/send_message"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="4"android:text="发送短信" /></LinearLayout></LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {private int phoneNum;private String textSMS;private String currentTime;private Button sendMessage;private Button getTime;private EditText getPhone;private EditText getMessage;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//注册控件sendMessage = (Button) findViewById(R.id.send_message);getTime = (Button) findViewById(R.id.get_time);getPhone = (EditText) findViewById(R.id.get_phone);getMessage = (EditText) findViewById(R.id.get_message);//获取当前时间getTime.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {textSMS = getMessage.getText().toString();SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");Date curDate = new Date(System.currentTimeMillis());//获取当前时间currentTime = formatter.format(curDate);textSMS = textSMS + currentTime;getMessage.setText(textSMS);}});//发送短信sendMessage.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (TextUtils.isEmpty(getPhone.getText().toString())) {Toast.makeText(MainActivity.this, "电话号码未填写", Toast.LENGTH_SHORT).show();return;}if (TextUtils.isEmpty(getMessage.getText().toString())) {Toast.makeText(MainActivity.this, "短信内容未填写", Toast.LENGTH_SHORT).show();return;}//获取电话号码和短信内容phoneNum = Integer.parseInt(getPhone.getText().toString());textSMS = getMessage.getText().toString();//开启多线程Thread thread = new Thread() {@Overridepublic void run() {ContentResolver resolver = getContentResolver();ContentValues values = new ContentValues();values.put("address", phoneNum);values.put("type", 1);values.put("date", System.currentTimeMillis());values.put("body", textSMS);resolver.insert(Uri.parse("content://sms"), values);}};thread.start();Toast.makeText(MainActivity.this, "短信成功生成", Toast.LENGTH_SHORT).show();}});}
}

运行截图:

转载于:https://www.cnblogs.com/woider/p/5140972.html

相关文章:

Uber体验之路

第一次听说uber&#xff0c;是2014年初的时候&#xff0c;那时候互联网热门新闻&#xff0c;经常冒出这家公司。 第一次体验uber&#xff0c;是2014.10.3&#xff0c;去机场接人&#xff0c;叫了专车。 第一次觉得uber体验好&#xff0c;是2014年感恩节的时候&#xff0c;它在深…

容器和虚拟机的对比

容器和虚拟机的对比 “敏捷”和“高性能”是容器相较于虚拟机最大的优势&#xff0c;也是它能够在 PaaS 这种更细粒度的资源管理平台上大行其道的重要原因。 不过&#xff0c;有利就有弊&#xff0c;基于 Linux Namespace 的隔离机制相比于虚拟化技术也有很多不足之处&#xff…

Spring复习笔记:2

Spring中的依赖注入 IOC的作用: 降低程序间的耦合(依赖关系) 依赖关系的管理&#xff1a; 以后都交给spring来维护&#xff0c;在当前类需要用到其他类的对象&#xff0c;由spring为我们提供&#xff0c;我们只需要在配置文件中说明依赖关系的维护&#xff0c;就称之为依赖注入…

Unity Android 2021:用C#打造3D ZigZag赛车游戏

Unity Android 2021 : Build 3D ZigZag Racing Game with C# MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:65节课(11h 7m) |大小解压后:3.6 GB …

封装了一套WeCenter的IOS SDK

度过了忙碌且迷茫的2015年&#xff0c;迎来了的郁闷且彷徨的2016年。 与哥们商量做些什么&#xff0c;谈不上创业也不是项目&#xff0c;只是想让2016年不必如2015年一样迷茫&#xff0c;也慰藉一下2016年的彷徨。 方向么&#xff0c;考察了几个行业&#xff0c;也做了些调研&a…

java多线程样例

这里我们做一个完整的样例来说明线程产生的方式不同而生成的线程的差别&#xff1a; package debug;import java.io.*;import java.lang.Thread;class MyThread extends Thread{ public int x 0; public void run(){ System.out.println(x); }}class R implements Runn…

Spring复习笔记:3

Spring基于xml的案例实践 在数据库中创建一张新的表 create table account(id int primary key auto_increment,name varchar(40),money float )character set utf8 collate utf8_general_ci;往表中导入数据 insert into account(name,money) values(aaa,1000); insert into…

Blender多米诺骨牌动画学习教程 The Impossible Domino Run in Blender

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小:8.53 GB 含课程文件 |时长:8h 20m Blender的运动跟踪&#xff0c;建模&#xff0c;渲染和合成工具集…

unity3d游戏开发猜想——当程序猿老去

程序猿将代码注入生命去打造互联网的浪潮之巅。当有一天他们老了。会走向那里&#xff0c;会做些什么&#xff1f;非常多年以后&#xff0c;在我60岁的那天早晨&#xff0c;天刚蒙蒙亮我就起床了&#xff0c;先去公园晨练&#xff0c;然后回来做早餐&#xff08;50岁的时候我学…

【JavaScript】JavaScript基础-变量、运算符与控制语句

一.变量 变量&#xff1a; 定义一个变量&#xff0c;系统会为之分配一块内存&#xff0c;程序可以用变量名来表示这块内存中的数据。 由于javascript采用的是弱类型的变量形式&#xff0c;因此&#xff0c;在声明一个变量的时候&#xff0c;我们不必声明它的类型&#xff0c;但…

ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

ROW_NUMBER() OVER()函数用法详解 &#xff08;分组排序 例子多&#xff09; https://blog.csdn.net/qq_25221835/article/details/82762416 posted on 2019-09-05 01:00 竹径风声 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/girl1314/p/11462711.html

Blender+Substance Painter全流程制作真实的机器人学习教程

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:44节课(10h 52m) |大小解压后:9.9 GB 含课程素材 如何使用Blender 2.8和Substance Painter制作真…

Spring复习笔记:4

在复习笔记三中我们进行的案例的编写&#xff0c;我们可以发现&#xff0c;就算使用了注解的方式&#xff0c;xml配置文件文件还是不能够删除&#xff0c;现在我们来将一些新的注解可以让我们去掉xml配置文件。 Configuration 作用&#xff1a;指定当前类是一个配置类 细节&a…

Extjs PROXY查询params无法传参,改用extraParams

转载于:https://www.cnblogs.com/cocoat/p/5153009.html

详解Paint的setPathEffect(PathEffect effect)

一、setPathEffect() 这个方法一看就和path有关&#xff0c;顾名思义&#xff0c;它就是给path设置样式&#xff08;效果&#xff09;的。PathEffect这个路径效果类没有具体的实现&#xff0c;效果是由它的六个子类实现的&#xff1a; 这六个子类分别可以实现不同的路径效果&am…

返回手势导致页面卡死并且UI错乱的问题解决

问题记录:在做了部分页面的转场动画之后,返回手势不灵了,快速连续返回的话会卡住,App退到后台再重新激活之后页面不卡了,但是UI错乱. 解决方案: 1. 在UINavigationController子类实现代理UIGestureRecognizerDelegate,并在viewDidLoad方法中增加代理设置: - (void)viewDidLoad …

Spring学习笔记:3(面向切面AOP)

AOP&#xff1a;Aspect Oriented Program&#xff08;面向切面&#xff09; 我们再回顾一下AOP的一些术语&#xff1a; 通知&#xff08;Advice&#xff09; 就是你想要的功能&#xff0c;也就是的安全、事物、日志等。先定义好&#xff0c;然后在想用的地方用一下。 连接…

Blender全流程制作真实感3D产品学习教程

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:41节课(4h 29m) |大小解压后:4.53 GB 仅使用blender 2.8进行建模、纹理、光照和渲染&#xff0c;…

如何给iOS应用添加原生的二维码扫描功能

之前总觉得二维码扫描很高大上&#xff0c;其实apple工程师早就为我们提供了便捷的方法。二维码扫描第三方的库也挺多的&#xff0c;不过效率高的当属系统提供的扫描方法。 二维码扫描主要用到了以下几个类&#xff1a;AVCaptureDevice,AVCaptureDeviceInput,AVCaptureMetadata…

2021-2027年中国市医疗电子场投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国医疗电子行业市场行业相关概述、中国医疗电子行业市场行业运行环境、分析了中国医疗电子行…

RabbitMQ入门(4)--路由

2019独角兽企业重金招聘Python工程师标准>>> ###路由 ###&#xff08;使用Java客户端&#xff09; 在先前的指南中&#xff0c;我们建立了一个简单的日志系统。我们可以将我们的日志信息广播到多个接收者。 在这部分的指南中&#xff0c;我们将要往其中添加一个功能…

从一个数组中寻找出现奇数次的数字

假设给定了数组nums为[0,1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,1,2,3,3,0] 其中3出现了3次 而其他数字都出现了两次 则我们应该得到结果为3 第一种方式&#xff1a;使用Hash 1 /**2 * 使用hash3 * */4 public static int singleNumber_1(int[] nums) {5 …

Blender写实建筑场景制作学习教程 Exterior Visualization in Blender 2.9

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:26节课(3h 41m) |大小:3.3 GB 使用Blender创建惊人的外部渲染。 你会学到: Blender中的建模、着色…

Postman增删改查接口测试

查 一.选择Get方式 二.点击Send开始测试&#xff0c;得出结果 增 一.选择Post方式 二.输入需要增添的数据 三.点击Send测试 四.没有报错&#xff0c;添加成功 查看一下&#xff0c;发现确实添加进去了 删 一.选择Delete方式 二.根据id删除&#xff0c;在请求路径下直接写出…

新安装Ubuntu加载时提示“为/检查磁盘时发生严重错误”的解决方法

本文部分内容转载自&#xff1a; http://jingyan.baidu.com/article/0aa22375bbffbe88cc0d6419.html http://www.aichengxu.com/view/35086 解决方法&#xff1a; 1. 进入Ubuntu启动菜单时按e 键进入启动项编辑模式&#xff1a; 2. 找到代码【ro rootflagsync】&#xff0c;将其…

android binder机制之——(创建binder服务)

Binder机制编程前面的几篇文章具体介绍了android中binder机制的方方面面&#xff0c;相信你对binder机制已经有了较深刻的理解。俗话说得好“学以致用”&#xff0c;以下我们就通过在android系统中创建一个我们自己的binder服务&#xff0c;来加深对binder机制的理解。&#xf…

通过NSProxy来解决NSTimer使用不当造成内存泄漏的问题

NSTimer的一般使用: 1 interface ViewController : UIViewController2 property (nonatomic, strong) NSTimer *timer;3 end4 5 implementation ViewController6 - (void)viewDidLoad {7 [super viewDidLoad];8 [self startTimer];9 } 10 11 - (void)startTimer { 12 …

Blender 2.9中的真实感三维产品全流程制作学习教程

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:41节课(6h 23m) |大小:5.83 GB 含课程文件 使用blender 2.9建模、纹理、光照和渲染真实的吉他 …

SpringBoot中的SFL4J日志

SpringBoot&#xff1a;底层是Spring框架&#xff0c;Spring框架默认使用的是JCL日志的抽象层 SpringBoot选用SLF4J和logback 如何系统地在系统中使用SLF4J 在开发的使用&#xff0c;日志记录方法的调用&#xff0c;不应该来直接调用日志的实现类&#xff0c;而是调用日志抽象…

web开发性能优化---用户体验篇

怎样从技术角度怎样增强用户体验。都是非常多平台都在做的事情&#xff0c;依据个人实际经验碰到几种体验做下总结。1、降低页面刷新白屏适当使用ajax技术。改善刷新白屏现象。2、信息提醒&#xff0c;邮件、站内信、短信在购物流程、售后流程适当添加信息温馨提醒环节&#xf…