Android总结六(BroadcastReceiver、通知、对话框、下拉列表)

一、接收广播消息

  1.什么是BroadcastReceiver?

    BroadcastReceiver是Android系统四大组件之一,本质上就是一种全局的监听器,用于监听系统全局的广播消息。

  2.怎样创建BroadcastReceiver?

    1)创建一个类继承自BroadcastReceiver类;

    2)在AndroidManifest.xml配置<receiver>节点信息。

  3.一旦实现了BroadcastReceiver,接下来就应该制定该BroadcastReceiver能匹配的Intent,此时有两种方式。

    1)在AndroidManifest.xml文件中配置,这种方式会一直监听。例如如下代码: 

        <receiver android:name="com.gnnuit.smsreceiver.SmsReceiver" >
            <intent-filter android:priority="1000" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

    2)使用代码进行指定,调用BroadcastReceiver的Context的registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法指定,这种方式可以通过unregisterReceiver(BroadcastReceiver receiver)取消监听,也叫临时监听。例如如下代码:

     IntentFilter filter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(new SmsReceiver(), filter);

  4.如果BroadcastReceiver的onReceive()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在BroadcastReceiver的onReceive()方法里执行一些耗时的操作,否则会发生ANR异常。如果确实需要根据Broadcast来完成一些耗时的操作,则可以考虑通过Intent启动一个Service来完成该操作。不应考虑使用新线程去完成耗时操作,因为Broadcast本身的生命周期很短。

  5.Broadcast被分为如下两种:

    1)Normal Broadcast(普通广播):普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高。但缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。

    2)Ordered Broadcast(有序广播):有序广播的接收者将按预先声明的优先级依次接收Broadcast。优先级别声明在<intent-filter/>元素的android:priority属性中,数越大优先级别越高,取值范围为-1000-1000.有序广播可以调用abortBroadcast()方法终止Broadcast Intent的传播,Broadcast Intent的传播一旦终止,后面的接收者就无法接收到Broadcast。

  6.用于发送广播的两个方法:

    1)sendBroadcast():发送普通广播。

    2)sendOrderedBroadcast():发送有序广播。

  7.短信拦截实例

SmsReceiver.java

package com.gnnuit.smsreceiver;

import java.util.Date;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;

public class SmsReceiver extends BroadcastReceiver {

    // 当接收到短信时被触发
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("接收到短信!!!");
        Object[] pdus = (Object[]) intent.getExtras().get("pdus");// 通过pdus可以获得接收到的所有短信消息
        for (Object pdu : pdus) {
            SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu);
            String content = message.getMessageBody();// 获得短信内容
            String number = message.getOriginatingAddress();// 获得短信号码
            Date date = new Date(message.getTimestampMillis());// 获得短信日期
            System.out.println(number + "," + content + "," + date);
            if ("110".equals(number)) {
                abortBroadcast();// 取消广播,让系统收不到短信
            }
        }
    }

}

AndroidManifest.xml

     <receiver android:name="com.gnnuit.smsreceiver.SmsReceiver" >
            <intent-filter android:priority="1000" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

二、通知

  1.吐司通知  

Toast.makeText(getApplicationContext(), "吐司通知", Toast.LENGTH_SHORT).show();

  2.状态栏通知

     NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);// 创建通知管理器
        Intent intent = new Intent(this, StatebarActivity.class);
        PendingIntent pendingIntent = createPendingResult(100, intent, PendingIntent.FLAG_ONE_SHOT);
        //创建通知对象,设置
        Notification notification = new Notification.Builder(this)
            .setContentTitle("下载完成")
            .setContentText("QQ下载完成")
            .setSmallIcon(R.drawable.a)
            .setContentIntent(pendingIntent)
            .setWhen(System.currentTimeMillis())
            .build();
        //设置通知点击一次后自动清除
        notification.flags = Notification.FLAG_AUTO_CANCEL;
        //用管理器发送通知
        manager.notify(0, notification);

  3.普通对话框

OnClickListener listener=new OnClickListener() {
            
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String msg="";
                switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    msg="确定";
                    break;
                case DialogInterface.BUTTON_NEGATIVE:
                    msg="取消";
                    break;
                case DialogInterface.BUTTON_NEUTRAL:
                    msg="稍后";
                    break;

                default:
                    break;
                }
                Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
            }
        };
        new AlertDialog.Builder(this)
            .setTitle("是否下载更新")
            .setMessage("1.速度更快\r\n2.更多功能\r\n3.修复上个版本的Bug")
            .setPositiveButton("确定", listener)
            .setNegativeButton("取消", listener)
            .setNeutralButton("稍后", listener)
            .show();

   4.单选对话框

final String[] items={"Java",".Net","PHP","网页平面设计","IOS","C++"};
        OnClickListener listener=new OnClickListener() {
            private int selected;
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    Toast.makeText(getApplicationContext(), items[selected], Toast.LENGTH_SHORT).show();
                    break;

                default:
                    selected=which;
                    break;
                }
            }
        };
        new AlertDialog.Builder(this)
            .setTitle("选择要学习的课程")
            .setSingleChoiceItems(items, -1, listener)
            .setPositiveButton("确定", listener)
            .show();

   5.多选对话框

     final String[] items={"吃饭","睡觉","打豆豆"};
        final boolean[] checkedItems={false,false,false};
        OnMultiChoiceClickListener choiceListener=new OnMultiChoiceClickListener() {
            
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if(isChecked){
                    System.out.println(items[which]);
                }
            }
        };
        OnClickListener buttonListener=new OnClickListener() {
            
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    StringBuffer sb=new StringBuffer();
                    for(int i=0;i<checkedItems.length;i++){
                        if(checkedItems[i]){
                            sb.append(items[i] + " ");
                        }
                    }
                    Toast.makeText(getApplicationContext(), sb.toString(), Toast.LENGTH_SHORT).show();
                    break;

                default:
                    break;
                }
            }
        };
        new AlertDialog.Builder(this)
            .setTitle("请选择您的爱好")
            .setMultiChoiceItems(items, checkedItems, choiceListener)
            .setPositiveButton("确定", buttonListener)
            .show();

   6.进度对话框

       final ProgressDialog dialog= new ProgressDialog(this);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setTitle("下载进度");
        dialog.setMax(100);
        dialog.setCancelable(false);
        new Thread(){
            public void run() {
                for(int i=0;i<100;i++){
                    dialog.setProgress(i);
                    SystemClock.sleep(300);
                }
                dialog.dismiss();
            };
        }.start();
        dialog.show();

   7.下拉列表

     Spinner spinner=(Spinner) findViewById(R.id.spinner1);
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        adapter.add("Java");
        adapter.add(".Net");
        adapter.add("PHP");
        adapter.add("网页平面设计");
        adapter.add("IOS");
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selection=(String) parent.getItemAtPosition(position);
                Toast.makeText(getApplicationContext(), selection, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

   8.自动完成文本框

     AutoCompleteTextView actv=(AutoCompleteTextView) findViewById(R.id.at);
        String[] items={"tom","txt","terry","杨晓霞","杨名","杨真真"};
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, items);
        actv.setAdapter(adapter);

  9.菜单

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.qq:
            Toast.makeText(getApplicationContext(), "分享到QQ", Toast.LENGTH_SHORT).show();
            break;
        case R.id.sina:
            Toast.makeText(getApplicationContext(), "分享到新浪", Toast.LENGTH_SHORT).show();
            break;
        case R.id.tt:
            Toast.makeText(getApplicationContext(), "分享到腾讯", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

 

 

    

转载于:https://www.cnblogs.com/FlySheep/p/3850189.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值