接受到了广播,但不能弹出提示和启动服务

监听的广播是:

    <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

第二个信息有错误,好好看一下

感觉是你的配置文件里面 缺少了处理, 广播 发出的关联部分。。。

定点context看一下是什么类型,估计context当前的状态不是显示状态了。所以弹出显示就不显示

服务没有在service里注册,没有弹出,是因为广播和服务都不是可见组件,也就是说不是继承与contextthemewrapper,所以不会弹出。

你用的静态注册,context对象不一样,不能转化成有界面的,你应该在启动的时候加flag或者用动态注册,那你想干什么干什么

context应该使用的是Application级别的而非activity级你看下