اشتراگ گذاری در اندروید با استفاده از Intent

منتشرشده توسط حامد قنبری در تاریخ

هنگامی که یک Intent را ایجاد می کنید، باید اقدامی را که می خواهید Intent  می خواهد انجام دهد را مشخص کنید . آندروید بدین منظور اکشن های مختلفی ، از جمله ACTION_SEND را تعریف کرده است اکشنیهمانطور که احتمالا حدس می زنید، نشان می دهد که قصد ارسال داده ها از یک اکتیویتی به یک  اکتیویتی دیگر را دارد عملی که حتی در خارج از مرزهای خود اپلیکیشن امکانپذیر شده و انتقال اطلاعات را تسهیل نموده است.

اشتراک محتوای متنی:

ساده ترین و رایج ترین عمل ACTION_SEND ارسال محتوای متن از یک اکتیویتی به دیگری است. به عنوان مثال، برنامه ساخته شده در مرورگر می تواند URL صفحه نمایش در حال حاضر به عنوان متن را با هر برنامه به اشتراک بگذارد. همچنین  اشتراک گذاری یک مقاله یا وب سایت با دوستان از طریق ایمیل یا شبکه های اجتماعی از این طریق مفید خواهد بود. درذیل کد اجرای این نوع اشتراک آمده است:

 

String yourtextshare = "سلام بر همه ایرانیان ";
Intent myintent = new Intent();
myintent.setAction(Intent.ACTION_SEND);
myintent.putExtra(Intent.EXTRA_TEXT, yourtextshare);
myintent.setType("text/plain");
startActivity(myintent);

اگر یک برنامه نصب شده با یک فیلتر  ACTION_SEND  با نوعMIME   از نوع text / plain  برنامه های دیگر مطابقت داشته باشد، سیستم Android آن را اجرا کند؛ همچنین اگر بیش از یک برنامه مطابقت داشته باشد، سیستمی  دیالوگ به نام (“انتخابگر”) را نشان می دهد که به کاربر اجازه می دهد یک برنامه را انتخاب کند.

با این حال، اگر بخواهید  می توانید از سیستم دیالوگی  ()Intent.createChooser به منظور انتقال  شیء خود استفاده کنید، تا از این طریق نسخه ای از اینتنت خود را که همیشه انتخاب کننده را نمایش می دهد، باز گرداند. این روش یک مزیت دارد و آن این است که حتی اگر کاربر قبلا اقدام پیش فرض برای این intent را انتخاب کرده باشد، انتخاب کننده همچنان نمایش داده خواهد شد.

 

String yourtextshare = "سلام بر همه ایرانیان ";
Intent myintent = new Intent();
myintent.setAction(Intent.ACTION_SEND);
myintent.putExtra(Intent.EXTRA_TEXT, yourtextshare);
myintent.setType("text/plain");
myintent.setType("text/plain");
startActivity(Intent.createChooser(myintent, getResources().getText(R.string.send_to)));

 

اشتراک محتوی باینری مانند عکس :

انتقال داده های باینری با استفاده از عمل ACTION_SEND همراه با تنظیم نوع MIME مناسب و قرار دادن URI به داده ها در حالتEXTRA_STREAM صورت می پذیرد. از این روش معمولا برای به اشتراک گذاشتن یک تصویر استفاده می شود اما می تواند برای به اشتراک گذاشتن هر نوع محتوای باینری دیگر از این روش کنید:

URI img = ""
Intent myintent = new Intent();
myintent.setAction(Intent.ACTION_SEND);
myintent.putExtra(Intent.EXTRA_STREAM, uriimage);
myintent.setType("image/jpeg");
startActivity(Intent.createChooser(myintent, getResources().getText(R.string.send_to)));

 

به منظور درک بهتر موضوع مثالی در ذیل آورده می شود:

اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را  ایجاد کنید

اکلیپس :File ⇒ New Android ⇒ Application Project

اندروید استودیو :File ⇒ New  ⇒ New Project

اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk  و نوع اکتیویتی (blank  یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود  را همان MainActivity قرار دهید. بعد از لود کامل برنامه ، در مسیر res ⇒layout لایه متناظر اکتیوتی اصلی یعنی activity_main را پیدا نمود و کدهای مندرج و پیش فرض آن را پاک کرده و کدهای xml  زیر را به آن اضافه کنید:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/buttonShareTextUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="اشتراگ گذاری متن" />

    <Button
        android:id="@+id/buttonShareImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/buttonShareTextUrl"
        android:text="اشتراگ گذاری عکس" />
</RelativeLayout>

بعد از مشخص کردن اجزای لایوت ، نوبت به نوشتن کدهای MainActivity  می رسد. در این کلاس ما ابتدا اجزا و عناصر لایوت را برای کلاس تعریف می کنیم. و سپس بر اساس دو متدی که برای  اشتراک گذاری فایل متنی و عکس     آورده شده است با کلیک بر روی هریک از باتن ها نوع عملیات آنها را مشخص کرده ایم:

package com.example.psrd.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;

import java.io.File;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // listeners of our two buttons
        View.OnClickListener handler = new View.OnClickListener() {
            public void onClick(View v) {
                switch (v.getId()) {

                    case R.id.buttonShareTextUrl:
                        shareTextUrl();
                        break;

                    case R.id.buttonShareImage:
                        shareImage();
                        break;
                }
            }
        };

        // our buttons
        findViewById(R.id.buttonShareTextUrl).setOnClickListener(handler);
        findViewById(R.id.buttonShareImage).setOnClickListener(handler);

    }

    // Method to share either text or URL.
    private void shareTextUrl() {
        Intent share = new Intent(android.content.Intent.ACTION_SEND);
        share.setType("text/plain");
        share.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

        // Add data to the intent, the receiving app will decide
        // what to do with it.
        share.putExtra(Intent.EXTRA_SUBJECT, "Title Of The Post");
        share.putExtra(Intent.EXTRA_TEXT, "http://www.psrd.ir");

        startActivity(Intent.createChooser(share, "اشتراک لینک!"));
    }


    // Method to share any image.
    private void shareImage() {
        Intent share = new Intent(Intent.ACTION_SEND);

        // If you want to share a png image only, you can do:
        // setType("image/png"); OR for jpeg: setType("image/jpeg");
        share.setType("image/*");

        // Make sure you put example png image named myImage.png in your
        // directory
        String imagePath = Environment.getExternalStorageDirectory()
                + "/myImage.png";

        File imageFileToShare = new File(imagePath);

        Uri uri = Uri.fromFile(imageFileToShare);
        share.putExtra(Intent.EXTRA_STREAM, uri);

        startActivity(Intent.createChooser(share, "اشتراک عکس"));
    }

}

 

حال می توانید پروژه خودتان را اجرا کنید و نتیجه کار خود را ببینید. با آرزوی بهترین ها.

 

 

 


0 دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --