Android学习(14)-手机通知,手机短信
来源:互联网 发布:duet windows 编辑:程序博客网 时间:2024/05/20 14:25
首先谈一下通知的用法,所谓通知,就是你平时看到手机上方状态栏多了一个小图,可以用手下拉查看通知。在Android中,通知可以通过广播,服务或者活动来创建。但是一般都是程序运行于后台的时候才会给出通知。
我们想做这么一个小东西:
那么如何去做呢?
首先,布局要弄好,一个是发送通知布局,一个是点击后跳转到的布局。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/SendNotice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送通知" /></RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/notification_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="呜哈哈,点击通知之后到了我这~" /></LinearLayout>有了布局,那么我们需要两个活动:
public class MainActivity extends Activity implements OnClickListener{private Button sendNotification;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sendNotification = (Button)findViewById(R.id.SendNotice);sendNotification.setOnClickListener(this);//此处该类通过接口的方式为按钮设置响应事件,所以此处如此设置}@Overridepublic void onClick(View view) {switch(view.getId()){case R.id.SendNotice:NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);//获取通知管理 和之前的网络信息管理一个道理 只要调用系统接口就可以Notification notification = new Notification(R.drawable.ic_launcher, "Hello Notification!", System.currentTimeMillis());//参数: 通知图标 通知一闪而过的时候出现的文字 通知出现的时间Intent intent = new Intent(this,NotificationResult.class);PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);notification.setLatestEventInfo(this, "Notification Title", "Notification Content", pi);//以上三个语句用于点击通知后调用的事件,即点击通知之后跳转到另外一个界面manager.notify(1, notification);//发送通知: 编号 通知内容break;default:break;}}}
以及点击后的活动:
public class NotificationResult extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.notification_result);//点击后取消通知,取消是根据ID来搞的NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);manager.cancel(1);}}
别忘了在文件中注册上所有的活动。
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.notificationtest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".NotificationResult"></activity> </application>还有其他设置,通知时候的声音,手机震动等。
通知的搞定了,下面讲一下短信的发送和接收方法。
我们希望实现下面一个小例子,能够接受短信,而且能够发送短信并监听发送状态:
首先,创建布局layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="来自:" /> <TextView android:id="@+id/sender" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:padding="10dp" android:text="短信内容:" /> <TextView android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="发送给:" /> <EditText android:id="@+id/to" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <EditText android:id="@+id/msg_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <Button android:id="@+id/send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送" /> </LinearLayout>
而后,我们编写活动类,很多说明都在注释中。道理很简单,通过动态注册广播来收听短信和短线发送状态。
public class MainActivity extends Activity {private TextView sender; //发送方private TextView content; //短信内容private EditText to;//接收方private EditText msgInput;//发送内容private Button send; //发送按钮//用于动态注册短信广播接收器private IntentFilter receiveFilter;private MessageReceiver messageReceiver;//监听发送短信是否成功private IntentFilter sendFilter;private SendStatusReceiver sendStatusReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//接收短信相关sender = (TextView)findViewById(R.id.sender);content = (TextView)findViewById(R.id.content);receiveFilter = new IntentFilter();receiveFilter.addAction("android.provider.Telephony.SMS_RECEIVED");//receiveFilter.setPriority(100);//用于拦截短信 广播中有的是可以拦截的messageReceiver = new MessageReceiver();registerReceiver(messageReceiver, receiveFilter);//增加短信发送成功监听广播sendFilter = new IntentFilter();sendFilter.addAction("SENT_SMS_ACTION");sendStatusReceiver = new SendStatusReceiver();registerReceiver(sendStatusReceiver, sendFilter);//发送短信相关to = (EditText)findViewById(R.id.to);msgInput = (EditText)findViewById(R.id.msg_input);send = (Button)findViewById(R.id.send);send.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SmsManager smsManager = SmsManager.getDefault();//发送后增加后续活动 此处就是为了监听短信是否成功Intent sentIntent = new Intent("SENT_SMS_ACTION");PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, sentIntent, 0);//通知那也用到过这个 用于事件处理后 紧接着调用的活动smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(), pi, null);//发送短信 注意参数}});}public void onDestroy(){super.onDestroy();//取消短信广播注册unregisterReceiver(messageReceiver);unregisterReceiver(sendStatusReceiver);}//短信广播接收器class MessageReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();Object[] pdus = (Object[])bundle.get("pdus");//提取短信消息SmsMessage[] messages = new SmsMessage[pdus.length]; //通过SmsMessage来存储短信for(int i = 0; i < messages.length; i++){messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);}String address = messages[0].getOriginatingAddress();//获取发送方号码String fullMessage = "";for(SmsMessage message : messages){fullMessage += message.getMessageBody();//获取短信内容}//设置界面上的呈现内容sender.setText(address);content.setText(fullMessage);//abortBroadcast();//拦截短信}}//发送短信状态接收器class SendStatusReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {if(getResultCode() == RESULT_OK){Toast.makeText(context, "发送短信成功", Toast.LENGTH_SHORT).show();}else{Toast.makeText(context, "发送短信失败", Toast.LENGTH_SHORT).show();}}}}
接收短信和发送短信都需要有权限生命,在配置文件中加上下面两句:
<uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.SEND_SMS"/>
Ok! 可以成功了
0 0
- Android学习(14)-手机通知,手机短信
- 学习Android手机短信监控
- Android中调用手机邮箱 手机短信 手机电话
- Android学习笔记--手机短信发送器
- android 手机收起通知栏
- 小米手机读取手机短信
- 获取手机联系人---手机短信
- 学习笔记(十)运用通知和手机多媒体
- Android实现手机短信管理器(Android Studio)
- Android手机状态栏通知(Notification)的功能与用法
- Android之手机通知栏Notification介绍(一)
- Android之手机通知栏Notification的使用(二)
- Delphi 监听安卓(Android)手机通知栏信息
- android手机root后的安全问题 (二)获取通知栏通知
- Android手机短信拦截---BroadcastReceiver(一)
- Android手机短信拦截---Observer(二)
- Android 获取手机短信(获取最新的)
- [mob]Android手机短信验证(自定义的)
- Windows下命令行改变路径 如C:\>
- u3d ngui屏幕适配
- Nginx+Tomcat7(tomcat6)+Memcached集群Session共享
- & 符号在 SQLPLUS 的转义
- RHEL 6 下安装Nginx步骤
- Android学习(14)-手机通知,手机短信
- SAP Business Objects 解决方案应用及实践
- android中常见的二种数据解析方法----XML和Json
- 【移动端】测试规范
- eXtremeDB 支持的 SQL 字段类型
- 基于RTSP协议流媒体服务器的实现
- windows8下安装64位的memcached服务
- RTSP协议
- Android问题:Activity生命周期事件