首页 > 学院 > 开发设计 > 正文

Adroid 广播

2019-11-09 16:21:18
字体:
来源:转载
供稿:网友

Adroid 广播 分为有序和无序广播 sendOrderBroadcast 、sendBroadcast。

无序广播。 广播发送方: 实例化一个Intent,用intent.setAction(设置广播名字),并且携带要发送的 数据(intent.putExtra),然后用sendBroadcast(intent)发送广播。

intent = new Intent(); //设置名字 intent.setAction("com.example.phonebroad.955"); } public void send(View view){ //获取发送的内容 String date=mian_01.getText().toString(); intent.putExtra("data",date); sendBroadcast(intent); //粘性广播 (也分为有序和无序 已过时,使用这个api需要权限android.Manifest.permission.BROADCAST_STICKY,粘性广播的特点是Intent会一直保留到广播事件结束,而这种广播也没有所谓的10秒限制,10秒限制是指普通的广播如果onReceive方法执行时间太长,超过10秒的时候系统会将这个广播置为可以干掉的candidate,一旦系统资源不够的时候,就会干掉这个广播而让它不执行。)api需要权限:<uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission><application //sendStickyBroadcast(intent); }

接收方: 需要配置广播接受者: 1.在清单文件中配置(静态广播 )

<receiver android:name=".ReceviedActivity"> <intent-filter> <action android:name="com.example.phonebroad.955"></action> </intent-filter> </receiver> </application>public class ReceviedActivity extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //判断你要接收的广播的名字 if("com.example.phonebroad.955".equals(intent.getAction())){ //接收内容 String data=intent.getStringExtra("data"); Log.i("hhhhhh",data); } } 2.使用java 代码(动态广播 优先于静态广播接收)public class Recevied2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("com.example.phonebroad.955".equals(intent.getAction())){ String data=intent.getStringExtra("data"); Log.i("hhhh2",data); } }}public class MainActivity extends AppCompatActivity { PRivate Recevied2 recevied2; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recevied2 = new Recevied2(); //意图过滤器 intentFilter = new IntentFilter(); intentFilter.addAction("com.example.phonebroad.955"); }//恢复时注册 @Override protected void onResume() { super.onResume(); registerReceiver(recevied2,intentFilter); }//销毁时取消注册 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(recevied2); }}

系统广播之监听手机通话状态事件

public class PhoneActivity 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("phone","大胡子:"+number); //电话管理者 TelephonyManager tm= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); //来电状态 int state=tm.getCallState(); //3个状态 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; } } }}配置权限及广播接受者<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=".PhoneActivity"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE"></action> </intent-filter> </receiver> </application>

“合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。“


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表