14

Tôi đang tạo một ứng dụng gọi điện.Không thể trả lời cuộc gọi đến trong android marshmallow 6.0

Đây là câu trả lời tự động hoạt động trên Android 4.0 và 5.0; trong khi khi tôi có một nút gọi trả lời cuộc gọi đến hoạt động nhưng nó không hoạt động trên Android 6.0.

Tôi đã thử nghiệm câu trả lời của bài này, nhưng nó không hoạt động quá: 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

Bạn đang kiểm tra quyền truy cập vào Android 6.0+? – Ahmed

+1

vâng tôi kiểm tra tất cả các giấy phép – Secret

+1

@Secret: Bạn có giải pháp cho việc này không? –

Trả lời

5

Đối với nhiều nghiên cứu, cuối cùng tôi tìm thấy giải pháp

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 trong manifest:

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

Accept trên nút bấm:

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

Bạn cần phải đánh dấu vào chương trình hộp thông báo chỉ cần đi đến

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

Đối với Quyền:

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

Đã kiểm tra phiên bản tối đa Nougat.

Chúc mừng!

0

Đã giải quyết! Ứng dụng trình quay số có hộp "Hiển thị thông báo" không đúng.

Không chắc chắn điều đó đã xảy ra như thế nào.

Đối với bất cứ ai gặp phải vấn đề tương tự:

Cài đặt> Ứng dụng> Tất cả> Dialer> Kiểm tra hộp thông báo.

0

Bạn cần phải đánh dấu vào chương trình thông báo hộp chỉ cần đi đến

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

Các vấn đề liên quan