Android 有时候广播接收不到,广播接收器不在android oreo中工作

我的广播接收器不是在使用oreo,但是它的工作正好在它的工作正常,我搜索了很多关于这个,但找不到合适的解决方案.有没有人面临同样的问题,这是关于我的服务的代码,其中广播已经实施.请告诉我如何在奥利奥工作.

这是班级

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

mContext = this;

mAppPreferences = new AppPreferences(mContext);

if (intent.getExtras() != null) {

data = (String) intent.getExtras().get("showPopUp");

phoneNumber= (String) intent.getExtras().get("dialNumber");

}

final IntentFilter intentFilter = new IntentFilter();

if (data.equalsIgnoreCase("true")) {

showPopup(getApplicationContext());

Utils.ApiHit(phoneNumber,getApplicationContext());

}

intentFilter.setPriority(2147483647);

intentFilter.addAction("android.intent.action.PHONE_STATE");

callExplicitReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {

if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {

savedNumber = intent.getExtras().getString("android.intent.extra.PHONE_NUMBER");

} else {

String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);

phoneNumber = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);

int state = 0;

if (stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)) {

state = TelephonyManager.CALL_STATE_IDLE;

} else if (stateStr.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {

state = TelephonyManager.CALL_STATE_OFFHOOK;

} else if (stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)) {

state = TelephonyManager.CALL_STATE_RINGING;

}

onCallStateChanged(context, state, phoneNumber);

}

}

}

};

mContext.registerReceiver(callExplicitReceiver, intentFilter);

return START_NOT_STICKY;

}

public void onIncomingCallReceived(Context ctx, String number, Date start) {

}

public void onIncomingCallAnswered(Context ctx, String number, Date start) {

if (popupView.getVisibility() == View.GONE) {

popupView.setVisibility(View.VISIBLE);

}

}

public void onIncomingCallEnded(Context ctx, String number, Date start, Date end) {

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

DeleteCallLogByNumber(number);

}

}, 2000);

if (popupView.getVisibility() == View.VISIBLE) {

popupView.setVisibility(View.GONE);

}

}

public void onOutgoingCallStarted(Context ctx, String number, Date start) {

// mAppPreferences.setPrefrenceString("busy", "yes");

// if (data.equalsIgnoreCase("true")) {

mediaPlayer = MediaPlayer.create(ctx, R.raw.speech_audio);

// } else {

// mediaPlayer = MediaPlayer.create(ctx, R.raw.speech_audio);

// }

mediaPlayer.start();

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

if (mediaPlayer != null && mediaPlayer.isPlaying()) {

mediaPlayer.stop();

mediaPlayer.release();

}

}

}, 12000);

if (popupView.getVisibility() == View.GONE) {

popupView.setVisibility(View.VISIBLE);

}

}

public void onOutgoingCallEnded(Context ctx, String number, Date start, Date end) {

mAppPreferences.setPrefrenceString("busy", "no");

if (mediaPlayer != null && mediaPlayer.isPlaying()) {

mediaPlayer.stop();

mediaPlayer.release();

mediaPlayer = null;

}

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

DeleteCallLogByNumber(phoneNumber);

}

}, 2000);

if (popupView.getVisibility() == View.VISIBLE) {

popupView.setVisibility(View.GONE);

}

}

public void onMissedCall(Context ctx, String number, Date start) {

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

DeleteCallLogByNumber(phoneNumber);

}

}, 2000);

if (popupView.getVisibility() == View.VISIBLE) {

popupView.setVisibility(View.GONE);

}

}

public void onCallStateChanged(Context context, int state, String number) {

if (lastState == state) {

return;

}

switch (state) {

case TelephonyManager.CALL_STATE_RINGING:

isIncoming = true;

callStartTime = new Date();

savedNumber = number;

onIncomingCallReceived(context, number, callStartTime);

break;

case TelephonyManager.CALL_STATE_OFFHOOK:

if (lastState != TelephonyManager.CALL_STATE_RINGING) {

isIncoming = false;

callStartTime = new Date();

onOutgoingCallStarted(context, savedNumber, callStartTime);

} else {

isIncoming = true;

callStartTime = new Date();

onIncomingCallAnswered(context, savedNumber, callStartTime);

}

break;

case TelephonyManager.CALL_STATE_IDLE:

if (popupView.getVisibility() == View.VISIBLE) {

popupView.setVisibility(View.GONE);

}

if (lastState == TelephonyManager.CALL_STATE_RINGING) {

onMissedCall(context, savedNumber, callStartTime);

} else if (isIncoming) {

onIncomingCallEnded(context, savedNumber, callStartTime, new Date());

} else {

onOutgoingCallEnded(context, savedNumber, callStartTime, new Date());

}

break;

}

lastState = state;

}

@Override

public void onDestroy() {

mContext.unregisterReceiver(callExplicitReceiver);

}

注意到接收内容,任何人都可以帮助我吗?

根据讨论的新增内容

清单数据: –

使用许可: –

Reciver: –

我的BroadCast接收器类: –

public class StartUpBootReceiver extends BroadcastReceiver {

private Context mContext;

@Override

public void onReceive(Context context, Intent intent) {

mContext= context;

String action = "START";

if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)

{

context.startForegroundService(new Intent(context, PhoneStateService.class));

}

else

{

context.startService(new Intent(context, PhoneStateService.class));

}

}

}

private boolean isServiceRunning(Class> serviceClass) {

ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);

for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {

if (serviceClass.getName().equals(service.service.getClassName())) {

return true;

}

}

return false;

}

}

休息相同的服务将接到电话,但问题是我仍然没有在接收器中调用.而主要的一点是服务应该只在用户点击按钮时调用,而不是自动调用,因为我必须传递一些值服务.

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值