14

我正在創建一個通話應用程序。無法在android棉花糖中接聽來電6.0

這裏是自動答案,它適用於Android 4.0和5.0;而當我有一個來電回答呼叫按鈕的作品,但它不適用於Android 6.0。

我測試了這個職位的答案,但它並沒有太多的工作: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; 
    } 
} 
+0

你在Android 6.0以上版本的權限檢查? – Ahmed

+1

是的,我檢查所有權限 – Secret

+1

@Secret:你有解決這個問題的方法嗎? –

回答

5

要多研究,終於讓我找到解決方案

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(); 
    } 
    } 
} 

加在清單:

<service 
     android:name=".NotificationCall" 
     android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
     <intent-filter> 
      <action android:name="android.service.notification.NotificationListenerService" /> 
     </intent-filter> 
    </service> 

接受按鈕點擊:

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(); 
      } 
     } 
    }); 

您需要勾選顯示通知框只是去

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

許可:

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); 
    } 

已經測試版本Nougat

乾杯!

0

解決! 撥號器應用程序未勾選「顯示通知」框。

不知道那是怎麼回事。

對於任何人遇到同樣的問題:

設置>應用程序>所有>撥號>檢查通知框。

0

您需要勾選顯示通知框 只是去

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