андроидная студия приглашает вариант только для facebook, messenger и whatsapp [duplicate]

Нажмите window + R (Run window Open) и в окне окна запуска "services.msc", а новые службы откроют службу поиска SQL SERVER(SQLEXPRESS) и повторите попытку, это работает для меня. Надеюсь, что это тоже работает для вас.

49
задан ישו אוהב אותך 21 January 2017 в 05:24
поделиться

9 ответов

Ответ Paresh Mayani в основном верен. Просто используйте Broadcast Intent, чтобы система и все другие приложения выбирали, каким образом контент будет использоваться совместно.

Чтобы поделиться текстом, используйте следующий код:

String message = "Text I want to share.";
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_TEXT, message);

startActivity(Intent.createChooser(share, "Title of the dialog the system will open"));
69
ответ дан marioosh 17 August 2018 в 14:57
поделиться
  • 1
    Хорошо спасибо :) – Andrea Mario Lufino 25 July 2011 в 11:17
  • 2
    @Janusz: Нет ли способа прямого обмена Facebook? Я имею в виду, не позволяя системе открывать список имен (facebook, email, twitter и т. Д.) Для выбора конкретного имени – user 30 December 2012 в 18:29
  • 3
    Да, вы можете интегрировать SDK Facebook и напрямую использовать параметры совместного доступа. Я бы не рекомендовал его. Это занимает много времени для результата, который хуже, чем 5 строк. – Janusz 2 January 2013 в 18:06
  • 4
    Но, если я хочу различать Twitter и другие, чтобы выбрать текст, который хочу поделиться, как это можно сделать? – abeljus 2 September 2013 в 10:52
  • 5
    В списке есть много ненужных приложений, которые не имеют никакого отношения к обмену текстами - как фильтровать и показывать только значимые (например, смс, твиттер, facebook, whatsapp, а не какое-то случайное приложение для электронной коммерции) – Jasper 21 February 2015 в 07:54
    String message = "This is testing."
Intent shareText = new Intent(Intent.ACTION_SEND);
shareText .setType("text/plain");
shareText .putExtra(Intent.EXTRA_TEXT, message);

startActivity(Intent.createChooser(shareText , "Title of the dialog the system will open"));
1
ответ дан Avanish Singh 17 August 2018 в 14:57
поделиться

Это позволит вам поделиться своим приложением с каким-либо приложением и т. д.:

try
            { Intent i = new Intent(Intent.ACTION_SEND);  
              i.setType("text/plain");
              i.putExtra(Intent.EXTRA_SUBJECT, "My application name");
              String sAux = "\nLet me recommend you this application\n\n";
              sAux = sAux + "https://play.google.com/store/apps/details?id=Orion.Soft \n\n";
              i.putExtra(Intent.EXTRA_TEXT, sAux);  
              startActivity(Intent.createChooser(i, "choose one"));
0
ответ дан Hamad 17 August 2018 в 14:57
поделиться

да, вы можете ... вам просто нужно знать точное имя пакета приложения:

  • Facebook - «com.facebook.katana»
  • Twitter - «com.twitter.android»
  • Instagram - «com.instagram.android»
  • Pinterest - «com.pinterest»

И вы может создать такое намерение

Intent intent = context.getPackageManager().getLaunchIntentForPackage(application);
if (intent != null) {
     // The application exists
     Intent shareIntent = new Intent();
     shareIntent.setAction(Intent.ACTION_SEND);
     shareIntent.setPackage(application);

     shareIntent.putExtra(android.content.Intent.EXTRA_TITLE, title);
     shareIntent.putExtra(Intent.EXTRA_TEXT, description);
     // Start the specific social application
     context.startActivity(shareIntent);
} else {
    // The application does not exist
    // Open GooglePlay or use the default system picker
}
30
ответ дан Ionut Negru 17 August 2018 в 14:57
поделиться
  • 1
    Он работает, но для меня отсутствовал shareIntent.setType («тип / plain»); – Teo Inke 6 March 2015 в 17:38
  • 2
    Тип может быть различным для каждого приложения. Я рекомендую установить его динамически, возможно, с помощью другого метода. – Ionut Negru 26 May 2015 в 09:56
  • 3
    Настройка типа зависит от того, что вы хотите использовать. Целевое приложение также должно поддерживать этот тип. Для этого вам нужно протестировать в реальной среде. Например, некоторые приложения поддерживают изображения напрямую, а другие - нет. – Ionut Negru 2 December 2015 в 10:28
  • 4
    просто я хочу поделиться ссылкой на приложение через все доступные приложения в устройстве, как отправить ссылку на gm, ail, whatsapp, facebook и другие сообщения, услуги – Harsha 13 October 2016 в 09:31

Я думаю, что следующий код поможет ....

public void btnShareClick(View v) {
    // shareBtnFlag = 1;
    Dialog d = new Dialog(DrawAppActivity.this);
    d.requestWindowFeature(d.getWindow().FEATURE_NO_TITLE);
    d.setCancelable(true);

    d.setContentView(R.layout.sharing);

    final Button btnFacebook = (Button) d.findViewById(R.id.btnFacebook);
    final Button btnEmail = (Button) d.findViewById(R.id.btnEmail);

    btnEmail.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            if (!btnEmail.isSelected()) {
                btnEmail.setSelected(true);
            } else {
                btnEmail.setSelected(false);
            }
            saveBtnFlag = 1;
            // Check if email id is available-------------
            AccountManager manager = AccountManager
                    .get(DrawAppActivity.this);
            Account[] accounts = manager.getAccountsByType("com.google");
            Account account = CommonFunctions.getAccount(manager);
            if (account.name != null) {
                emailSendingTask eTask = new emailSendingTask();
                eTask.execute();
                if (CommonFunctions.createDirIfNotExists(getResources()
                        .getString(R.string.path)))

                {
                    tempImageSaving(
                            getResources().getString(R.string.path),
                            getCurrentImage());
                }

                Intent sendIntent;
                sendIntent = new Intent(Intent.ACTION_SEND);
                sendIntent.setType("application/octet-stream");
                sendIntent.setType("image/jpeg");
                sendIntent.putExtra(Intent.EXTRA_EMAIL,
                        new String[] { account.name });
                sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Drawing App");
                sendIntent.putExtra(Intent.EXTRA_TEXT, "Check This Image");
                sendIntent.putExtra(Intent.EXTRA_STREAM,
                        Uri.parse("file://" + tempPath.getPath()));

                List<ResolveInfo> list = getPackageManager()
                        .queryIntentActivities(sendIntent,
                                PackageManager.MATCH_DEFAULT_ONLY);

                if (list.size() != 0) {

                    startActivity(Intent.createChooser(sendIntent,
                            "Send Email Using:"));

                }

                else {
                    AlertDialog.Builder confirm = new AlertDialog.Builder(
                            DrawAppActivity.this);
                    confirm.setTitle(R.string.app_name);
                    confirm.setMessage("No Email Sending App Available");
                    confirm.setPositiveButton("Set Account",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    dialog.dismiss();
                                }
                            });
                    confirm.show();
                }
            } else {
                AlertDialog.Builder confirm = new AlertDialog.Builder(
                        DrawAppActivity.this);
                confirm.setTitle(R.string.app_name);
                confirm.setMessage("No Email Account Available!");
                confirm.setPositiveButton("Set Account",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                Intent i = new Intent(
                                        Settings.ACTION_SYNC_SETTINGS);
                                startActivity(i);
                                dialog.dismiss();
                            }
                        });
                confirm.setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int which) {

                                dialog.dismiss();
                            }
                        });
                confirm.show();
            }
        }

    });

    btnFacebook.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            if (!btnFacebook.isSelected()) {
                btnFacebook.setSelected(true);
            } else {
                btnFacebook.setSelected(false);
            }
            saveBtnFlag = 1;
            // if (connection.isInternetOn()) {

            if (android.os.Environment.getExternalStorageState().equals(
                    android.os.Environment.MEDIA_MOUNTED)) {
                getCurrentImage();
                Intent i = new Intent(DrawAppActivity.this,
                        FaceBookAuthentication.class);
                i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(i);
            }

            else {
                ShowAlertMessage.showDialog(DrawAppActivity.this,
                        R.string.app_name, R.string.Sd_card,
                        R.string.button_retry);
            }
        }
    });
    d.show();

}

public void tempImageSaving(String tmpPath, byte[] image) {
    Random rand = new Random();

    tempfile = new File(Environment.getExternalStorageDirectory(), tmpPath);
    if (!tempfile.exists()) {
        tempfile.mkdirs();
    }

    tempPath = new File(tempfile.getPath(), "DrawApp" + rand.nextInt()
            + ".jpg");
    try {
        FileOutputStream fos1 = new FileOutputStream(tempPath.getPath());
        fos1.write(image);

        fos1.flush();
        fos1.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    sendBroadcast(new Intent(
            Intent.ACTION_MEDIA_MOUNTED,
            Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}

public byte[] getCurrentImage() {

    Bitmap b = drawingSurface.getBitmap();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    b.compress(Bitmap.CompressFormat.PNG, 100, stream);

    byteArray = stream.toByteArray();

    return byteArray;
}

private class emailSendingTask extends AsyncTask<String, Void, String> {
    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(DrawAppActivity.this);
        progressDialog.setTitle(R.string.app_name);
        progressDialog.setMessage("Saving..Please Wait..");
        // progressDialog.setIcon(R.drawable.icon);
        progressDialog.show();

    }

    @Override
    protected String doInBackground(String... urls) {

        String response = "";
        try {

            if (android.os.Environment.getExternalStorageState().equals(
                    android.os.Environment.MEDIA_MOUNTED)) {

                response = "Yes";

            } else {
                ShowAlertMessage.showDialog(DrawAppActivity.this,
                        R.string.app_name, R.string.Sd_card,
                        R.string.button_retry);

            }

        } catch (Exception e) {

            e.printStackTrace();
        }

        return response;

    }

    @Override
    protected void onPostExecute(String result) {

        if (result.contains("Yes")) {
            getCurrentImage();

        }
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                Uri.parse("file://"
                        + Environment.getExternalStorageDirectory())));

        progressDialog.cancel();
    }
}

private class ImageSavingTask extends AsyncTask<String, Void, String> {
    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(DrawAppActivity.this);
        progressDialog.setTitle(R.string.app_name);
        progressDialog.setMessage("Saving..Please Wait..");
        // progressDialog.setIcon(R.drawable.icon);
        progressDialog.show();

    }

    @Override
    protected String doInBackground(String... urls) {

        String response = "";
        try {

            if (android.os.Environment.getExternalStorageState().equals(
                    android.os.Environment.MEDIA_MOUNTED)) {

                response = "Yes";

            } else {
                ShowAlertMessage.showDialog(DrawAppActivity.this,
                        R.string.app_name, R.string.Sd_card,
                        R.string.button_retry);

            }

        } catch (Exception e) {

            e.printStackTrace();
        }

        return response;

    }

    @Override
    protected void onPostExecute(String result) {

        if (result.contains("Yes")) {
            getCurrentImage();

            if (CommonFunctions.createDirIfNotExists(getResources()
                    .getString(R.string.path)))

            {
                saveImageInSdCard(getResources().getString(R.string.path),
                        getCurrentImage());
            }
        }
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                Uri.parse("file://"
                        + Environment.getExternalStorageDirectory())));

        progressDialog.cancel();
    }
}

Для приложения facebook используйте facebook SDK

1
ответ дан j0k 17 August 2018 в 14:57
поделиться
  • 1
    Не могли бы вы заполнить код? существует множество переменных и других функций, отсутствующих – Mahdi Giveie 30 November 2012 в 06:17

Я думаю, вы хотите предоставить кнопку Share, нажав на которую должен присутствовать подходящий вариант для СМИ / веб-сайта, чтобы поделиться им. В Android вам необходимо создать createChooser для этого же.

Обмен текстом:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "This is the text that will be shared.");
startActivity(Intent.createChooser(sharingIntent,"Share using"));

Обмен двоичными объектами (изображения, видео и т. Д.)

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
Uri screenshotUri = Uri.parse(path);

sharingIntent.setType("image/png");
sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(sharingIntent, "Share image using"));

FYI, код выше из Общий доступ к содержимому в Android с использованием ACTION_SEND Intent

26
ответ дан Jesper 17 August 2018 в 14:57
поделиться
  • 1
    Ваш пример совместного использования разделяет изображение – Janusz 25 July 2011 в 10:57
  • 2
    теперь вы делитесь веб-страницей :) – Janusz 25 July 2011 в 11:00
  • 3
    @PareshMayani Привет Можем ли мы поделиться изображением и текстом с такими же намерениями? – Md Maidul Islam 26 August 2013 в 15:54
  • 4
    @PareshMayani. Должно быть "text / plain" и не «plain / text». Провел час, чтобы понять, почему это не сработало для меня. – vvkatwss vvkatwss 23 September 2014 в 12:00
  • 5
    @PareshMayani Я уверен, что я уже делаю R & amp; D для этого. Поскольку я смогу найти хороший контент, я поделюсь им здесь. – MashukKhan 2 August 2018 в 05:51

ACTION_SEND предоставит вам только варианты отправки с помощью GMail, YahooMail ... и т. д. (Любое приложение, установленное на вашем телефоне, которое может выполнять ACTION_SEND). Если вы хотите поделиться на Facebook или Twitter, вам нужно будет поместить пользовательские кнопки для каждого из них и использовать свой собственный SDK, например Facebook SDK или Twitter4J .

1
ответ дан Ovidiu Latcu 17 August 2018 в 14:57
поделиться
  • 1
    Это неверно ... ACTION_SEND откроет все, что есть на устройстве. Если Facebook и Twitter находятся на устройстве, то они будут отображаться как опция для акций – taraloca 12 October 2011 в 16:27
  • 2
    независимо от того, что зарегистрировалось для ACTION_SEND, и оно создаст выборщик. невозможно использовать action_send, чтобы перейти прямо в твиттер facebook. вот что я говорил. – Ovidiu Latcu 12 October 2011 в 16:31
  • 3
    Вы всегда можете отредактировать свой ответ и прояснить его. – Janusz 1 June 2012 в 07:27
  • 4
    Да, ты прав. отредактировал мой ответ :) – Ovidiu Latcu 1 June 2012 в 13:14
  • 5
    Однако в Android чаще встречается глобальная кнопка Share, а не только FB и Twitter. Это только усложняет ситуацию намного больше, а также дает пользователю меньше шансов поделиться чем-то (ссылка, например) так, как они хотят. – Aitor Gómez 18 September 2012 в 09:39

ACTION_SEND будет работать корректно для всех, и он берет тело текста на стену в твиттере, G mail .. но он не работает на странице Face Book ... Его известная ошибка в Android android SDK .. но все же они не фиксировали его

3
ответ дан RAJESH 17 August 2018 в 14:57
поделиться
  • 1
    Сделайте это замечанием, и я бы его поддержал. – Brian 24 July 2012 в 03:25
  • 2
    вниз ACTION_SEND будет работать правильно для всех, и он принимает текст текста на стену в твиттере, G mail .., но он не подходит для страницы Face Book ... Его, как известно, ошибка в Android android SDK .., но все же они не зафиксировали его – RAJESH 24 July 2012 в 07:44
  • 3
    ACTION_SEND хорошо работает для Facebook и Facebook Messenger. Но стоит подготовить соответствующие мета-теги OpenGraph на сервере , если вы хотите, чтобы сообщение сообщения отображало значащее уменьшенное изображение и описание. См. stackoverflow.com/questions/1138460/… . – Alex Cohn 24 June 2015 в 08:40

Используйте этот параметр

Facebook - "com.facebook.katana"
Twitter - "com.twitter.android"
Instagram - "com.instagram.android"
Pinterest - "com.pinterest"



SharingToSocialMedia("com.facebook.katana")


public void SharingToSocialMedia(String application) {

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_STREAM, bmpUri);

    boolean installed = checkAppInstall(application);
    if (installed) {
        intent.setPackage(application);
        startActivity(intent);
    } else {
        Toast.makeText(getApplicationContext(),
                "Installed application first", Toast.LENGTH_LONG).show();
    }

}


 private boolean checkAppInstall(String uri) {
    PackageManager pm = getPackageManager();
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
    }

    return false;
}
6
ответ дан Sunil Chaudhary 17 August 2018 в 14:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: