мое android приложение падает при попытке поделиться им в том, что приложение (которое не установлено) - PullRequest
0 голосов
/ 07 апреля 2020
 Button clickButton = (Button) findViewById(R.id.newbutton);

        assert clickButton != null;

        clickButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {


    Intent uriIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("whatsapp://send?text=" + "Text you want to share"));

  startActivity(uriIntent);

 }

   });

Ответы [ 4 ]

0 голосов
/ 07 апреля 2020

Похоже, вы не нацелены на правильный WhatsApp URI:

Используйте следующий.

 Uri.parse("http://api.whatsapp.com/send?text=Hello World!");
0 голосов
/ 07 апреля 2020

Это из-за вашего намерения не найдено ни одного действия, которое вы хотите открыть. так что вам нужно обработать ActivityNotFoundException как показано ниже

Button clickButton = (Button) findViewById(R.id.newbutton);

            assert clickButton != null;

            clickButton.setOnClickListener(new View.OnClickListener() {

                @Override

                public void onClick(View v) {

    try{
          Intent uriIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("whatsapp://send?text=" + "Text you want to share"));

      startActivity(uriIntent);
        }catch(ActivityNotFoundException ex) {
          System.out.println("ERROR");
          System.out.println(ex.getMessage());
          failureCallback.invoke(ex.getMessage());
        }


     }

       });
0 голосов
/ 07 апреля 2020

Вы можете проверить по имени пакета, установлено приложение или нет. Если установлено, поделитесь им в WhatsApp или вызовите собственный список приложений, которые поддерживают функции общего доступа.

Проверьте условия, подобные этим.

if(!appInstalledOrNot("com.whatsapp")){
    // Toast message not installed.
}else{
    // Toast message installed.
}

Generi c метод, чтобы проверить любое приложение установлено или нет

private boolean appInstalledOrNot(String uri) {
        PackageManager pm = getPackageManager();
        boolean isInstalled;
        try {
            pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
            isInstalled = true;
        }
        catch (PackageManager.NameNotFoundException e) {
            isInstalled = false;
        }
        return isInstalled;
    }
0 голосов
/ 07 апреля 2020

Это ожидаемое поведение, поскольку вполне вероятно, что у некоторых пользователей не установлены определенные приложения. Вам необходимо проверить, есть ли какие-либо действия, которые могут обработать намерение, вызвав intent.resolveActivity() и проверив, не является ли результат нулевым.

В документации по разработке намерений и фильтров намерений указано это здесь :

Внимание. Возможно, у пользователя не будет никаких приложений, которые обрабатывают неявное намерение, которое вы отправляете на startActivity(). Либо приложение может быть недоступно из-за ограничений профиля или настроек, установленных администратором. Если это произойдет, вызов не удастся, и ваше приложение будет зависать Чтобы убедиться, что действие получит намерение, вызовите resolveActivity() вашего объекта Intent. Если результат не нулевой, есть хотя бы одно приложение, которое может обработать намерение, и безопасно вызвать startActivity(). Если результат равен нулю, не используйте намерение и, если возможно, вы должны отключить функцию, которая выдает намерение. В следующем примере показано, как проверить, что намерение разрешается в действии. В этом примере не используется URI, но тип данных намерения объявляется для указания содержимого, переносимого статистами.

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