Android 发出呼叫的广播接收器未触发

Android 发出呼叫的广播接收器未触发,android,broadcastreceiver,Android,Broadcastreceiver,我在服务内以编程方式创建的BroadcastReceiver没有调用onReceive方法。我在服务类内创建了一个扩展BroadcastReceiver的类。早些时候,当我在清单中实现它并运行代码时,它当时不起作用。由于服务在后台连续运行,我认为BroadcastReceiver也会随它去吧 编辑: 现在,在以编程方式声明权限后,我得到一个异常。BroadcastReceiver被触发,但我得到以下异常。请查看下面的代码 代码: 例外情况: 您需要具有“处理\u传出\u呼叫”权限 因为此权限是危

我在服务内以编程方式创建的BroadcastReceiver没有调用onReceive方法。我在服务类内创建了一个扩展BroadcastReceiver的类。早些时候,当我在清单中实现它并运行代码时,它当时不起作用。由于服务在后台连续运行,我认为BroadcastReceiver也会随它去吧

编辑: 现在,在以编程方式声明权限后,我得到一个异常。BroadcastReceiver被触发,但我得到以下异常。请查看下面的代码

代码:

例外情况:


您需要具有“处理\u传出\u呼叫”权限

因为此权限是危险的,所以您需要以编程方式请求它

编辑:


为广播接收器添加默认构造函数。当您在运行时注册时,您不会将其添加到清单。

您是否有“处理传出呼叫”权限?我在清单中声明了它是危险的,不足以在清单中声明。需要请求它。我还没有以编程方式声明监听来电的权限。但它正在工作。不是这样dangerous@jobin保护级别:危险我没有以编程方式为READ\u PHONE\u状态声明权限,清单中除外,但我可以检查传入呼叫。@jobin某些权限需要能够在运行时被请求,即以编程方式。。。。想象一下,你的手机摄像头在没有告诉你它正在启动的情况下就启动了。。。所以,试试他说的,自己看看结果
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Environment;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;

/**
 * Created by Jobin on 15-03-2018.
 */

public class PhoneListenerService extends Service{
    private PhoneStateListener phoneStateListener;
    private TeleListener teleListener;
    private TelephonyManager telephonyManager;
    private File file;
    private OutgoingReceiver outgoingReceiver;
    @Override
    public void onCreate()
    {
        super.onCreate();
        outgoingReceiver=new OutgoingReceiver();
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL");
        registerReceiver(outgoingReceiver,intentFilter);
        file=new File(Environment.getExternalStorageDirectory().getAbsolutePath());
        telephonyManager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        file=new File(Environment.getExternalStorageDirectory(),"AutoCall");
        if (!file.exists())
        {
            Log.e("File","Created");
            file.mkdir();
        }
        else
        {
            Log.e("File",file.getPath());
        }
        telephonyManager.listen(new TeleListener(getApplicationContext(),file.getAbsolutePath()),PhoneStateListener.LISTEN_CALL_STATE);
        Log.e("Oncreate","Service");

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.e("OnCommand","Service");
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(outgoingReceiver);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public class OutgoingReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.e("Out","Track");
            String phone_number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
            Toast.makeText(context,"Outgoing call identified",Toast.LENGTH_SHORT).show();
        }
    }
}
FATAL EXCEPTION: main                                                                                          Process: com.js.globemaster.autocallrecorder, PID: 7086
java.lang.RuntimeException: Unable to instantiate receiver com.js.globemaster.autocallrecorder.PhoneListenerService$OutgoingReceiver: java.lang.InstantiationException: java.lang.Class<com.js.globemaster.autocallrecorder.PhoneListenerService$OutgoingReceiver> has no zero argument constructor
                                                                                               at android.app.ActivityThread.handleReceiver(ActivityThread.java:3681)
                                                                                               at android.app.ActivityThread.access$2000(ActivityThread.java:229)
                                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1903)
                                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                               at android.os.Looper.loop(Looper.java:148)
                                                                                               at android.app.ActivityThread.main(ActivityThread.java:7325)
                                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                                                            Caused by: java.lang.InstantiationException: java.lang.Class<com.js.globemaster.autocallrecorder.PhoneListenerService$OutgoingReceiver> has no zero argument constructor
                                                                                               at java.lang.Class.newInstance(Native Method)
                                                                                               at android.app.ActivityThread.handleReceiver(ActivityThread.java:3676)
                                                                                               at android.app.ActivityThread.access$2000(ActivityThread.java:229) 
                                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1903) 
                                                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                               at android.os.Looper.loop(Looper.java:148) 
                                                                                               at android.app.ActivityThread.main(ActivityThread.java:7325) 
                                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)