android код, чтобы выбрать файл, а затем поделиться им через WhatsApp - PullRequest
1 голос
/ 07 января 2020

Я пытаюсь создать приложение, которое выбирает файл из файлового менеджера устройства. После выбора файла его следует отправить через WhatsApp.
Может ли кто-нибудь помочь, как выбрать файл, а затем поделиться этим выбранным файлом?

  1. Как получить путь к файлу?
  2. Как использовать этот путь для обмена им через WhatsApp?
  3. Есть ли код, который нужно добавить в manifest.xml file?

Макет xml имеет две кнопки. Одна кнопка, чтобы перейти в файловый менеджер, а другая кнопка, чтобы поделиться выбранным файлом. Он также имеет TextView для отображения пути.

public class MainActivity extends AppCompatActivity {
    Button b,button;
    TextView t;
    Intent intent;
    public String PathHolder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    b=(Button) findViewById(R.id.b);



    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {



            File sharingfile = new File(PathHolder);

            Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
            whatsappIntent.setType("image/jpg");//mention type of image you want to share
            whatsappIntent.setPackage("com.whatsapp");
            Uri uri = Uri.fromFile(sharingfile);
            whatsappIntent.putExtra(Intent.EXTRA_STREAM, uri);
            try {
                startActivity(whatsappIntent);
            } catch (android.content.ActivityNotFoundException ex) {

                Toast.makeText(getApplicationContext(),"Whatsap not installed",Toast.LENGTH_SHORT).show();
            }



        }
    });

        button = (Button)findViewById(R.id.button) ;
        t=(TextView)findViewById(R.id.textView);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("*/*");
                startActivityForResult(intent, 7);

            }
        });


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub

        switch(requestCode){

            case 7:

                if(resultCode==RESULT_OK){

                    PathHolder = data.getData().getPath();

                    Toast.makeText(MainActivity.this, PathHolder , Toast.LENGTH_LONG).show();
                    t.setText(PathHolder);
                }
                break;

        }
    }
}

, но я не могу поделиться файлом с устройства через WhatsApp.

1 Ответ

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

Вам нужен метод Intent.createChooser для обмена контентом URI с другими зарегистрированными приложениями, которые могут его обработать.

Это тот же механизм c для отправки электронных писем, обмена изображениями или ссылками. и многие другие задачи.

Эта статья должна вам помочь: https://developer.android.com/training/sharing/send

Это официальная версия c

Intent.createChooser

publi c stati c Intent createChooser (Цель Intent, заголовок CharSequence)

Добавлена ​​на уровне API 1

Удобная функция для создания Intent ACTION_CHOOSER.

Создает новое намерение ACTION_CHOOSER, которое оборачивает заданное целевое намерение, также необязательно предоставляя заголовок. Если целевое намерение определило FLAG_GRANT_READ_URI_PERMISSION или FLAG_GRANT_WRITE_URI_PERMISSION, тогда эти флаги также будут установлены в возвращаемом намерении выбора, с его ClipData, установленным соответствующим образом: либо прямым отражением getClipData (), если оно не является нулевым, либо новым ClipData, созданным из getData ().

Параметры

target

Намерение, которое пользователь выберет для выполнения действия.

title

Необязательный заголовок, который будет отображаться в селекторе.

Возвращает

Возврат нового Намеренный объект, который вы можете передать Context.startActivity () и связанным с ним методам.

...