Android 自定义广播和系统广播(电话状态)(基础)

今天来说说广播,广播BroadcastReceiver,广播的话也分为无序和有序的,我们今天来说说无序广播和系统广播。分为发送者和接收者,它们的关系是一对多的关系,发送者只要设置名字和数据,接收者接收,接收者注册,分为两种注册,一种是静态注册,一种是动态注册,静态注册是写在清单文件里的,动态注册是写在java代码里面的,

发送广播无序的,里面还有一个黏性发送,用一个即可MainActivity

public class MainActivity extends AppCompatActivity {

    private EditText et_main_content;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_main_content = (EditText) findViewById(R.id.et_main_content);

        intent = new Intent();
        //设置广播的名字
        intent.setAction("com.example.android_20_sender.955");

    }

    public void send(View view){
        String content=et_main_content.getText().toString();

        //携带数据
        intent.putExtra("date",content);

        //发送广播(无序广播)
//        sendBroadcast(intent);

        //发送粘性广播
        sendStickyBroadcast(intent);



    }

静态接收和动态接收:

在清单里面配置
 <receiver android:name=".MyReceived01">
            <intent-filter>
                <action android:name="com.example.android_20_sender.955"></action>
            </intent-filter>
        </receiver>




public class MyReceived01 extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        if ("com.example.android_20_sender.955".equals(intent.getAction())){
          String date= intent.getStringExtra("date");
            Log.i("test","静态接受者收到广播"+date);

        }

    }

动态广播:
public class MainActivity extends AppCompatActivity {

    private MyReceived02 myReceived02;
    private IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myReceived02 = new MyReceived02();
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.android_20_sender.955");

    }

    @Override
    protected void onResume() {
        super.onResume();
        //动态注册广播
         registerReceiver(myReceived02, intentFilter);
    }

    //销毁动态广播
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceived02);
    }


public class MyReceived02 extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        if ("com.example.android_20_sender.955".equals(intent.getAction())){
          String date= intent.getStringExtra("date");
            Log.i("test","动态接受者收到广播"+date);

        }

    }

接下来讲讲系统广播,就简单的讲讲广播系统的电话状态,在这里你先要在清单里设置权限,就允许读取手机状态的权限,

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android_20_phonestate">
    <!--读取电话状态权限-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>


    <application android: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>

        <receiver android:name=".MyPhoneState">
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE">


                </action>

            </intent-filter>


        </receiver>

    </application>



</manifest>

下面是一个监听:


public class MyPhoneState extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        if("android.intent.action.PHONE_STATE".equals(intent.getAction()));

                //获取电话号码
       String number=intent.getStringExtra("incoming_number");
        Log.i("test","有电话进来了"+number);
//        Toast.makeText(context, "电话来了"+number, Toast.LENGTH_SHORT).show();


        //获取电话状态
        //电话管理者
     TelephonyManager tm= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE );
    int state= tm.getCallState();
        switch (state){
            case TelephonyManager.CALL_STATE_RINGING:
                Log.i("test","来电话了");
                break;

            case TelephonyManager.CALL_STATE_OFFHOOK:
                Log.i("test","通话中");
                break;

            case TelephonyManager.CALL_STATE_IDLE:
                Log.i("test","挂断了");
                break;
        }



    }

谢谢观看,今天的分享就到这里!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值