Can't answer incoming call in android marshmallow 6.0

匿名 (未验证) 提交于 2019-12-03 01:49:02

问题:

I'm creating a calling app.

Here's Auto answer which works on android 4.0 and 5.0; whereas when i have an incoming call answer call button works but it doesn't work on android 6.0.

I tested answer of this post but it doesn't work too : Answer Incoming Call in Android 6.0

IncomingActivity:

@Override public void onClick(View v) {     switch (v.getId())     {         case R.id.imgaccept:         {             if (Build.VERSION.SDK_INT >= 21) {                 new Thread(new Runnable() {                      @Override                     public void run() {                          try {                             Runtime.getRuntime().exec( "input keyevent " + KeyEvent.KEYCODE_HEADSETHOOK );                             Intent intent = new Intent(getApplicationContext(), OutGoing.class);                             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);                             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                             intent.putExtra(CommonMethods.OUTGOING_NUMBER, savedNumber);                             startActivity(intent);                             finish();                         }                         catch (Throwable t) {                          }                     }                 }).start();             }             else {                 Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON);                 buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK));                 sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED");                  Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);                 buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));                 sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED");                  Intent intent = new Intent(this, OutGoing.class);                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);                 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                 intent.putExtra(CommonMethods.OUTGOING_NUMBER, savedNumber);                 startActivity(intent);                 finish();             }             break;         }         case R.id.imgdecline:         {             CommonMethods.rejectCall(this);             finish();             break;         }         default:             break;     } } 

回答1:

To many research, finally i found solution

NotificationCall.java

public class NotificationCall extends NotificationListenerService {  @RequiresApi(api = Build.VERSION_CODES.KITKAT)  static StatusBarNotification mysbn; Context context;  public StatusBarNotification[] getActiveNotifications() {     return super.getActiveNotifications(); }  public void onCreate() {     super.onCreate();     this.context = getApplicationContext(); }  @Override public void onNotificationPosted(StatusBarNotification sbn) {     super.onNotificationPosted(sbn);     mysbn = sbn;     try {          String packageName = sbn.getPackageName();         Intent intent = new Intent("Msg");         intent.putExtra("package", packageName);         LocalBroadcastManager.getInstance(this.context).sendBroadcast(intent);      } catch (Exception e) {         e.printStackTrace();     }   } } 

Add in manifest:

 

Accept on button click:

button.setOnClickListener(new View.OnClickListener() {         @TargetApi(Build.VERSION_CODES.LOLLIPOP)         @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)         @Override         public void onClick(View v) {             try {                 for (MediaController mediaController : ((MediaSessionManager) getApplicationContext().getSystemService("media_session")).getActiveSessions(new ComponentName(getApplicationContext(), NotificationCall.class))) {                     if ("com.android.server.telecom".equals(mediaController.getPackageName())) {                         mediaController.dispatchMediaButtonEvent(new KeyEvent(1, 79));                         return;                     }                 }             } catch (SecurityException e2) {                 e2.printStackTrace();             }         }     }); 

You need to tick the show notification box just go to

Settings > Apps > All > Dialer > Check the notification box 

For Permission:

  if (Settings.Secure.getString(getContentResolver(), "enabled_notification_listeners").contains(getApplicationContext().getPackageName()))     {      } else         {         Intent i = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);         startActivity(i);     } 

Have tested upto version Nougat.

Cheers!



回答2:

Solved! Dialer app had "Show Notifications" box unticked.

Not sure how that happened.

For anyone experiencing the same issue:

Settings > Apps > All > Dialer > Check the notification box.



回答3:

You need to tick the show notification box just go to

Settings > Apps > All > Dialer > Check the notification box



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!