我正在尝试获取传出号码,但在oreo之前,代码工作得非常好,但在使用oreo代码的设备中无效.
public class IncomingbroadCastReceiver extends broadcastReceiver {
Context context;
WhatsAppContacts requiredContact;
List<String> messages = new ArrayList<>();
String callerName="";
Realm realm;
String outgoingNumber = "";
@Override
public void onReceive(final Context context, final Intent intent) {
Log.d("Search","onReceive");
this.context = context;
realm = Realm.getDefaultInstance();
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(new PhonestateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
Log.d("Search","above Ringing"+state);
if(state == TelephonyManager.CALL_STATE_RINGING){
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("number", incomingNumber);
Log.d("Ringing", incomingNumber);
editor.apply();
Log.d("Search","inside call state changed");
initialiseAndStartService();
}
else if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")){
//Outgoing call
String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.i("tag","Outgoing number : "+number);
if(number!=null){
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("number", number);
editor.apply();
Log.d("Search","inside call state changed");
initialiseAndStartService();
}
}
}
},PhonestateListener.LISTEN_CALL_STATE);
}
}
在奥利奥之前的版本中,它的工作完全正常.但在奥利奥无法获得传出号码.
解决方法:
奥利奥有一个限制.您无法在清单中注册隐式广播,而NEW_OUTGOING_CALL是隐式广播.当您的应用程序处于活动状态且用户正在与其进行交互时,您才能进行该广播工作.
你可以找到更多信息here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。