Можно ли получить явное намерение от другого приложения? - PullRequest
0 голосов
/ 05 апреля 2019

Я работаю с кнопкой Bluetooth и Zebra TC20.Я хочу начать сканирование зебры, когда нажата дополнительная кнопка Bluetooth.

Кнопка Bluetooth поддерживается их приложением - flic.Есть возможность отправить Намерение.Поэтому я хотел бы отправить намерение в мое приложение.Это может быть сделано неявным намерением.Но я создаю это приложение, так что я знаю точную активность, когда сканирование должно быть запущено.

Из того, что я читаю, я должен использовать явное намерение, если я хочу, чтобы действие, которое я знаю по имени, но везде связано явное намерениев одном приложении.

Можно ли вызвать конкретную активность моего приложения из другого приложения?

Этот вопрос отредактирован.

1 Ответ

3 голосов
/ 05 апреля 2019

Посмотрите руководство на стр. 52-61, все объяснено, мне пришлось реализовать его с помощью ET55, но, похоже, тот же процесс.

Я лично сделал это, используя опцию Intent output с намерением, доставленным через широковещательную рассылку.

Сначала вы можете открыть приложение DataWedge (приложение должно быть предварительно установлено, именно здесь вы настраиваете параметры сканера)

  1. Вы создаете профиль для своего приложения
  2. Вы нажимаете на профиль и проверяете Profile enabled option
  3. Вы включаете ввод штрих-кода и выход по назначению, отключаете нажатие клавиш и ip-вывод
  4. Вы связываете свое приложение (опция Associated apps)
  5. (см. Стр. 75-76 руководства). Вы задаете намерение с помощью чего-то вроде datawedge.yourapp.SCANNER_RESULT
  6. Вы оставили категорию пустой
  7. Вы установили намеренную доставку на Broadcast Intent
  8. В остальном опция по умолчанию должна быть в порядке

Затем в вашем приложении необходимо зарегистрировать приемник вещания (в onCreate()):

//first you implement the action to be executed when it receives the broadcast
receiverZebra = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String scanResult = intent.getStringExtra("com.symbol.datawedge.data_string");
        /*
            do things with the barcode here
        */
    }
};

//then make a filter for the broadcast
filterZebra = new IntentFilter();
filterZebra.addCategory(Intent.CATEGORY_DEFAULT);
//the action you set in step 5 in datawedge
filterZebra.addAction("datawedge.yourapp.SCANNER_RESULT");

Затем в методах onStart и onStop вы можете зарегистрировать / отменить регистрацию вашего вещательного приемника

@Override
protected void onStart(){
    super.onStart();
    registerReceiver(receiverZebra, filterZebra);
}

@Override
protected void onStop()
{
    super.onStop();
    unregisterReceiver(receiverZebra);
}

Есть и другие способы его реализации, не было бы другого варианта, кроме вывода Intent, если бы его не было, но он отлично работает для меня. Я не думаю, что между TC20 и ET55 есть большая разница, поэтому он должен работать и для вас

После того, как вопрос отредактирован

Взято из этого урока

В приложении для настройки вашей кнопки вы должны иметь возможность связать название намеренного действия с кнопкой Bluetooth. Чтобы получить его, вы должны установить фильтр намерений в манифесте приложения:

<activity
    android:name="com.example.myapplication.activitytolaunch"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="com.example.myapplication.ACTIVITY_TO_LAUNCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

И ваша кнопка должна будет запустить намерение: "com.example.myapplication.ACTIVITY_TO_LAUNCH"

Если вы хотите запустить упражнение напрямую, вы можете использовать вторую часть ответа. Если вам нужно обрабатывать штрих-коды при открытии вашего приложения (то есть добавлять штрих-коды в список), если вы можете сказать кнопке передать намерение, вы можете использовать первую часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...