20

1 年から IOT 製品に取り組んでおり、付属のアプリケーションは問題なく動作していました。Androidの上位バージョンでは、プログラムで呼び出しを受け入れることができません。機能は製品にとって非常に重要です。どんな助けでも大歓迎です。

2016年11 月のセキュリティ パッチ更新の前は、Runtime.getRunTime.exec("Command")プログラムで呼び出しを受け入れるために正常に動作していました。

Runtime.getRuntime().exec("input keyevent " +Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));

AndroidのNougatバージョンでそれを可能にする方法。

あらゆる種類のハックを探しています。

機能強化のためのスレッドを開きました。

https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened&groupby=&sort=&id=231938

注*同じ問題に直面している方がいる場合は、参加するようにリクエストしAndroid Dev Team、ユーザーから実行時の許可を取得するための準備を提供してください。上記のURLからリクエストしてください。

4

4 に答える 4

1

これは一種のハックで、ユーザー補助サービスを使用して電話を受けることができます。アクセシビリティ サービスを有効にするには、[設定] - [アクセシビリティ] - [サービス] でサービスを有効にする必要があります。

まず、typeWindowContentChanged を accessibilityEventTypes に追加します。

<accessibility-service
     android:accessibilityEventTypes="typeViewClicked|typeViewFocused|typeViewScrolled|typeWindowContentChanged|typeWindowStateChanged"
     android:packageNames="com.example.android.myFirstApp, com.example.android.mySecondApp"
     android:accessibilityFeedbackType="feedbackSpoken"
     android:notificationTimeout="100"
     android:settingsActivity="com.example.android.apis.accessibility.TestBackActivity"
     android:canRetrieveWindowContent="true"
/>

そして、イベントや「表示されるテキスト」や「内容説明」で何かをする。

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {

    // Do something with Click or Focused event
    final int eventType = event.getEventType();
    String eventText = null;
    switch(eventType) {
        case AccessibilityEvent.TYPE_VIEW_CLICKED:
            eventText = "Focused: ";
            break;
        case AccessibilityEvent.TYPE_VIEW_FOCUSED:
            eventText = "Focused: ";
            break;
    }
    eventText = eventText + event.getContentDescription();


    // Traverse all items in screen. 
    // Do something with text.

    AccessibilityNodeInfo info = getRootInActiveWindow();

    int index;
    int count = info.getChildCount();
    AccessibilityNodeInfo child;

    for (index = 0; index < count; index++) {
        child = info.getChild(index);
        if (child.getText() != null)
            Log.d(TAG, "text: " + child.getText().toString() + " " + child.getContentDescription());

        // perform Click
        //if (child.isClickable());
            //child.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    }
}

はい、これが問題を解決するための適切な方法ではないことは承知しています。これは一種のハックです。

于 2017-02-21T10:12:00.650 に答える
0

「 Vishal Sharma 」の回答によると、他の言語をサポートするために、アクション ボタンのタイトルを動的に取得できます。

  @Override
  public void onNotificationPosted(StatusBarNotification sbn) {
    try {
      if (sbn.getNotification().actions != null) {
        Notification.Action[] notificationAction=sbn.getNotification().actions;
        //Log.e(G.TAG, "" +notificationAction  + " =>"+notificationAction.length);
           String rejectTitle=""+notificationAction[0].title;
           String acceptTitle=""+notificationAction[1].title;

        for (Notification.Action action : notificationAction){
          if (action.title.toString().equalsIgnoreCase(acceptTitle)) {
            PendingIntent intent = action.actionIntent;
            try {
              intent.send();
            } catch (PendingIntent.CanceledException e) {
              e.printStackTrace();
            }
          }
        }


      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
于 2018-07-02T10:17:13.120 に答える