首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在android棉花糖6.0中无法接听来电

在android棉花糖6.0中无法接听来电
EN

Stack Overflow用户
提问于 2017-02-20 08:19:57
回答 2查看 2.2K关注 0票数 14

我正在创建一个呼叫应用程序。

这是在Android4.0和5.0上工作的自动应答;而当我有来电应答按钮时,call按钮可以工作,但在Android6.0上不工作。

我测试了这篇文章的答案,但它也不起作用:Answer Incoming Call in Android 6.0

IncomingActivity:

代码语言:javascript
运行
复制
@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;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-05 11:37:25

对许多研究,我终于找到了解决办法。

NotificationCall.java

代码语言:javascript
运行
复制
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();
    }
  }
}

添加清单:

代码语言:javascript
运行
复制
 <service
        android:name=".NotificationCall"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>

接受按钮点击:

代码语言:javascript
运行
复制
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();
            }
        }
    });

您需要勾选“节目通知”框,只需转到

代码语言:javascript
运行
复制
Settings > Apps > All > Dialer > Check the notification box

请允许:

代码语言:javascript
运行
复制
  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);
    }

已经测试了努格特的最新版本。

干杯!

票数 7
EN

Stack Overflow用户

发布于 2017-08-11 16:15:25

解决了!拨号器应用程序取消了“显示通知”框。

不知道这是怎么发生的。

对于任何经历同样问题的人:

设置>应用程序>所有>拨号>选中通知框。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42339534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档