为什么这个代码不适用于android 6 marshmallow API 23?它不会抛出异常,但callStateListener中的代码不起作用.
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);PhonestateListener callStateListener = new PhonestateListener() { @OverrIDe public voID onCallStateChanged(int state, String incomingNumber) { //if(logAtive) Log.i(LOG_TAG,incomingNumber + " " + state); if(state==TelephonyManager.CALL_STATE_RINGING){ Toast.makeText(getApplicationContext(),"hey, receive your call. Phone is ringing.", Toast.LENGTH_LONG).show(); } if(state==TelephonyManager.CALL_STATE_OFFHOOK){ Toast.makeText(getApplicationContext(),"You are in a call. ", Toast.LENGTH_LONG).show(); } if(state==TelephonyManager.CALL_STATE_IDLE){ Toast.makeText(getApplicationContext(),"You are in IDle state… ", Toast.LENGTH_LONG).show(); } }};telephonyManager.Listen(callStateListener, PhonestateListener.ListEN_CALL_STATE);
权限:
<uses-feature androID:name="androID.harDWare.telephony" androID:required="true" /><uses-permission androID:name="androID.permission.READ_PHONE_STATE" /><uses-permission androID:name="androID.permission.MODIFY_PHONE_STATE" /><uses-permission androID:name="androID.permission.CALL_PHONE" /><uses-permission androID:name="androID.permission.PROCESS_INCOMING_CALLS" />
它在AndroID 5.1.1中完美运行,但在6(API级别23)中无法运行
解决方法:
我刚碰到这个并想出来了.这是因为您的目标是AndroID SDK 23.如果您将清单文件更改为目标API 22,那么即使在Marshmallow设备上安装并运行它也会开始工作.
如果您仍希望定位API 23,则必须先使用新的运行时权限API来请求权限使用,否则将被拒绝.
https://developer.android.com/training/permissions/requesting.html
总结以上是内存溢出为你收集整理的为什么这个代码不适用于android 6 marshmallow Api 23?全部内容,希望文章能够帮你解决为什么这个代码不适用于android 6 marshmallow Api 23?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)