1.intent和PendingIntent的区别

intent表示执行某种意图
pendingIntent表示暂缓执行某种意图,直到遇到特殊条件才执行
在这里插入图片描述

2.发送通知:Notification

参考文章
Notification表示的事一种提示用户操作的组件(就是滑屏下拉的通知)
在这里插入图片描述

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //用来发通知的类
        NotificationManager notificationManager= (NotificationManager) getSystemService(Activity.NOTIFICATION_SERVICE);
        //创建被发送的信息
        Notification notification=new Notification(R.drawable.dress23,"来自fengray的提示",System.currentTimeMillis());//立刻发送信息
        //创建pendingIntent对象
        PendingIntent contentIntent=PendingIntent.getActivity(this,0,getIntent(),PendingIntent.FLAG_UPDATE_CURRENT);//创建PendingItent对象
        //执行发送消息
        notification.setLatestEventInfo(this,"fengrayTech","fengray Tech.co",contentIntent);
        notificationManager.notify("mldn",R.drawable.dress24,notification);

    }
}

安卓6以后已经取消了setLatestEventInfo方法,全面是使用Notification.Builder方法
如:

public class MainActivity extends AppCompatActivity {

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                /*
        首先需要一个NotificationManager来对通知进行管理
        调用Context的getSystemService()方法获取到。
        getSystemService()方法接受的一个字符串参数用于确定系统的的哪一个服务。
         */
        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        //创建pendingIntent对象
        PendingIntent pendingIntent=PendingIntent.getActivity(this,0,getIntent(),PendingIntent.FLAG_UPDATE_CURRENT);//创建PendingItent对象
       

        //通知渠道的ID
        String id = "channel_01";
        
        Notification notification = new NotificationCompat.Builder(MainActivity.this,id)
                //指定通知的标题内容
                .setContentTitle("fengray")
                //设置通知的内容
                .setContentText("this is message from frengray")
                //指定通知被创建的时间
                .setWhen(System.currentTimeMillis())
                //设置通知的小图标
                .setSmallIcon(R.drawable.dress23)
                //设置通知的大图标
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),
                        R.drawable.dress24))
                //添加点击跳转通知跳转
                .setContentIntent(pendingIntent)
                //实现点击跳转后关闭通知
                .setAutoCancel(true)
                .build();

/*
调用NotificationManager的notify()方法将通知显示出来
传入的第一个参数是通知的id
传入的第二个参数是notification对象
 */
        notificationManager.notify(1,notification);

    }
}

也有结合通道的方式创建通知:

public class MainActivity extends AppCompatActivity {

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                /*
        首先需要一个NotificationManager来对通知进行管理
        调用Context的getSystemService()方法获取到。
        getSystemService()方法接受的一个字符串参数用于确定系统的的哪一个服务。
         */
        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        //创建pendingIntent对象
        PendingIntent pendingIntent=PendingIntent.getActivity(this,0,getIntent(),PendingIntent.FLAG_UPDATE_CURRENT);//创建PendingItent对象
        /*
        调用NotificationChannel创建通知渠道实例
        并为它设置属性
         */

        //通知渠道的ID
        String id = "channel_01";
        //用户可以看到的通知渠道的名字
        CharSequence name = "MyChannel";
        //用户可看到的通知描述
        String description ="here is my channel";
        //构建NotificationChannel实例
        NotificationChannel notificationChannel =
                new NotificationChannel(id,name,NotificationManager.IMPORTANCE_HIGH);

        //配置通知渠道的属性
        notificationChannel.setDescription(description);
        //设置通知出现时的闪光灯
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        //设置通知出现时的震动
        notificationChannel.enableVibration(true);
        notificationChannel.setVibrationPattern(new long[]{100,200,300,400,500,400,300,200,100});
        //在notificationManager中创建通知渠道
        notificationManager.createNotificationChannel(notificationChannel);
       

        Notification notification = new NotificationCompat.Builder(MainActivity.this,id)
                //指定通知的标题内容
                .setContentTitle("fengray")
                //设置通知的内容
                .setContentText("this is message from frengray")
                //指定通知被创建的时间
                .setWhen(System.currentTimeMillis())
                //设置通知的小图标
                .setSmallIcon(R.drawable.dress23)
                //设置通知的大图标
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),
                        R.drawable.dress24))
                //添加点击跳转通知跳转
                .setContentIntent(pendingIntent)
                //实现点击跳转后关闭通知
                .setAutoCancel(true)
                .build();

/*
调用NotificationManager的notify()方法将通知显示出来
传入的第一个参数是通知的id
传入的第二个参数是notification对象
 */
        notificationManager.notify(1,notification);

    }
}

结果:
在这里插入图片描述
在这里插入图片描述

3.发送短信(非主流方式)

在这里插入图片描述
利用类 SmsManager 发送信息, smsManager 为 SmsManager 一个默认的实例. SmsManager smsManager = SmsManager.getDefault();
  smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)
具体参数为:
  destinationAddress: 收件人号码
  scAddress: 短信中心服务号码, 这里设置为null
  text: 发送内容
  sentIntent: 发送短信结果状态信号(是否成功发送),new 一个Intent , 操作系统接收到信号后将广播这个Intent.此过程为异步.
  deliveryIntent: 对方接收状态信号(是否已成功接收).

public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnSent:
            /**
             * 实现短信发送功能
             */
            // 获取默认短信管理对象
            SmsManager smsManager = SmsManager.getDefault();//安卓6以后好像被弃用了,新版本不认getDefault()
            // 判断发送内容字数(一件信息最多70 字)
            if(SMSContent.length() <= 70) {
                smsManager.sendTextMessage(SMSTo, null, SMSContent, null, null);
            }else{
                // SmsManger 类中 divideMessage 会将信息按每70 字分割
                List<String> smsDivs = smsManager.divideMessage(SMSContent);
                for(String sms : smsDivs) {
                    smsManager.sendTextMessage(SMSTo, null, sms, null, null);

                }
            }
            Toast.makeText(PhoneSMSActivity.this, "信息已发送", Toast.LENGTH_SHORT);
            break;
        }
    }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐