广播的一些基本用法

来源:互联网 发布:算法设计与分析第二版 编辑:程序博客网 时间:2024/06/01 09:46

      


          静态广播与动态广播

       具体用法:在安卓软件中静态广播都可以接受发送广播的信息,动态广播软件中它后台关闭后,是不可以接受广播的消息

-------------发送广播

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.g0831_android20_sender.599");
    }
    public void send(View view){
     String content=et_main_content.getText().toString();

// intent传值
    intent.putExtra("con",content);
        //发送广播(无序广播)
//      sendBroadcast(intent);
    
}
}



-------------(静态广播)接收广播

   先在AndroidManifest中配置

 <!--配置广播接受者:
       1.在清单文件中配置(静态广播)
       2.使用java 代码(动态广播)
       -->
<receiver android:name=".Myreceice_nian">
    <intent-filter>
    <action android:name="com.example.g0831_android20_sender.599"></action>
    </intent-filter>
</receiver>



-----Java代码写

public class Myreceice02 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        if("com.example.g0831_android20_sender.599".equals(intent.getAction())){
        String con=intent.getStringExtra("con");
        Log.i("test","i号接受者:"+con);
    }
}
}


-------------(动态广播)接收广播可以用黏性广播


****也需要在 先在AndroidManifest中配置和静态广播一样

public class Myreceice_nian extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        if("com.example.g0831_android20_sender.599".equals(intent.getAction())){
        String con=intent.getStringExtra("con");
        Log.i("test","粘性号接受者:"+con);
    }
}
}



//需要配置(动态注册广播需要onResume)

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        nian=new Myreceice_nian();
        intentFilter=new IntentFilter();
        intentFilter.addAction("com.example.g0831_android20_sender.599");
    }
//动态注册广播需要onResume
    @Override
    protected void onResume() {
        super.onResume();
        //注册广播
        registerReceiver(nian,intentFilter);


    }

  //注销动态广播必须写
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销动态广播
        unregisterReceiver(nian);
    }



-------------------------------------------系统广播

先在AndroidManifest中配置

  <!--读取电话状态权限-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

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



//代码

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


            //获取电话号码
            String number=intent.getStringExtra("con");
            Log.i("test","电话进来了:"+con);
            //获得电话状态
            //电话管理者
           TelephonyManager  tm= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
     int state=tm.getCallState();
            switch (state){
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i("test","电话来了a");
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i("test","电话中,,,,,,,");
                    break;
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.i("test","电话挂了");
                    break;
            }
        }
    }
}



0 0