监听的广播是:
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
Manifest 代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testbroadcastreceiver">
<!--电话钻港台-->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter android:priority="99999">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyService"/>
<!--需要注意的是,监听广播往往需要添加响应的权限,监听外拨电话的声明如下,6.0以上需要动态申请权限:-->
<receiver android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.PROCESS_OUTGOING_CALLS">
<intent-filter android:priority="-1">
<!--NEW_OUTGOING_CALL 监听外拨电话-->
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
</application>
</manifest>
广播的代码:
<receiver android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.PROCESS_OUTGOING_CALLS">
<intent-filter android:priority="-1">
<!--NEW_OUTGOING_CALL 监听外拨电话-->
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
(注:广播的权限在开启应用程序时已经动态获取了)
广播类的主要代码:
public void onReceive(Context context, Intent intent) {
Log.i(TAG,"接收到了广播=============================================");
//接受到了广播
try {
Toast.makeText(context,"接受到了广播",Toast.LENGTH_LONG).show();
Intent intent1 = new Intent(context,MyService.class);
context.startService(intent1);
Log.i(TAG,"接收到了广播111"+context);
}catch (Exception e){
e.printStackTrace();
Log.i(TAG,"接收到了广播2222");
}
}
服务类的主要代码:
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this,"收到了广播",Toast.LENGTH_LONG).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this,"收到了广播————————---",Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}
打印的日志 :
11-01 13:22:46.612 27292-27292/com.example.testbroadcastreceiver I/Test :MainActivity-->: 活动onPause()状态 ------
11-01 13:22:46.665 27292-27292/com.example.testbroadcastreceiver I/Test :MainActivity-->: 活动 onStop()------当一个Activity被另一个Activity完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时它不再可见,但是跟Paused状态一样保持着其所有状态信息及其成员变量。
11-01 13:22:53.860 27292-27292/com.example.testbroadcastreceiver I/Test :MyBroadcastReceiver-->: 接收到了广播=============================================
11-01 13:22:53.872 27292-27292/com.example.testbroadcastreceiver I/Test :MyBroadcastReceiver-->: 接收到了广播111android.app.ReceiverRestrictedContext@8412aff
11-01 13:24:04.562 27292-27305/com.example.testbroadcastreceiver I/IPCThreadState: Application
11-01 13:24:04.564 27292-27305/com.example.testbroadcastreceiver E/SchedPolicy: set_thread_freeze_state, freeze=1, pid=27292, num=15