Как настроить событие Share Intent Onclick в Android

Как настроить Android Share Intent для приложения Facebook. Когда я использую намерение общего доступа, я получаю следующий диалог.

Диалоговое окно общего доступа

Но я использую Facebook SDK для публикации изображения и текста. И как настроить, когда мы щелкаем значок Facebook в приведенном выше диалоговом окне, он переходит к моему пользовательскому диалоговому окну facebook...


person Mr. N.V.Rao    schedule 19.02.2014    source источник
comment
Попробуйте эту ссылку stackoverflow.com/questions/6827407/   -  person Hariharan    schedule 19.02.2014
comment
Можно ли обработать событие onclick для общего ресурса намерения @HariharanTamilan   -  person Mr. N.V.Rao    schedule 19.02.2014


Ответы (2)


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

Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
sendIntent.setType("text/plain");
List activities = ShareList.this.getPackageManager().queryIntentActivities(sendIntent, 0);

Отправьте этот список в класс адаптера:

ListView lv=(ListView)findViewById(R.id.listView1);
final ShareAdapter adapter=new ShareAdapter(ShareList.this,activities.toArray());
lv.setAdapter(adapter);

Вот код класса адаптера:

public class ShareAdapter extends BaseAdapter {
Object[] items;
private LayoutInflater mInflater;
Context context;

public ShareAdapter(Context context, Object[] items) {
    this.mInflater = LayoutInflater.from(context);
    this.items = items;
    this.context = context;
}

public int getCount() {
    return items.length;
}

public Object getItem(int position) {
    return items[position];
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.singleitem, null);
        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.textView1);
        holder.logo = (ImageView) convertView.findViewById(R.id.imageView1);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.name
            .setText(((ResolveInfo) items[position]).activityInfo.applicationInfo
                    .loadLabel(context.getPackageManager()).toString());

    holder.logo
            .setImageDrawable(((ResolveInfo) items[position]).activityInfo.applicationInfo
                    .loadIcon(context.getPackageManager()));

    return convertView;
}

static class ViewHolder {

    TextView name;
    ImageView logo;
}}

Обработка конкретной сети социальных сетей в списке с использованием следующего кода:

lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            ResolveInfo info = (ResolveInfo) adapter.getItem(arg2);
            if(info.activityInfo.packageName.contains("facebook")) {
                new PostToFacebookDialog(context, body).show();
        //here u can write your own code to handle the particular social media networking apps.     
                Toast.makeText(getApplicationContext(), "FaceBook", Toast.LENGTH_LONG).show();
            } else {
                Intent intent = new Intent(android.content.Intent.ACTION_SEND);
                intent.setClassName(info.activityInfo.packageName, info.activityInfo.name);
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
                intent.putExtra(Intent.EXTRA_TEXT, "body");
                ((Activity)ShareList.this).startActivity(intent);
            }

        }
    });
person Venu    schedule 21.02.2014
comment
Отличный ответ. Но не могли бы вы сказать мне, что такое R.id.listView1? - person Basit; 25.08.2014
comment
Большое спасибо. Было немного сложно, но благодаря вашим советам у меня все получилось. Завтра я покажу свое решение, как дополнительный способ - я просто новичок, но, возможно, это станет понятнее, если я объясню свой код другим. Большое спасибо! - person Martin Pfeffer; 01.12.2014

Я использовал решение Venu, чтобы заставить работать "настраиваемое намерение общего доступа". У меня просто не было проблем с созданием xml. Итак, здесь я хочу показать другим новичкам в Android, как добавить custom_share_list_white.xml. Возможно, это поможет другим заставить его работать.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal">

        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/listView"
            android:footerDividersEnabled="false"/>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center_vertical">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/imageView"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Large Text"
                android:id="@+id/tv_share_adapter"
                android:gravity="center_vertical"
                android:layout_gravity="center_vertical"/>
        </LinearLayout>

    </LinearLayout>

</LinearLayout>

в ShareAdapter.java:

 public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.custom_share_list_white, null);
            holder = new ViewHolder();
            holder.name = (TextView) convertView.findViewById(R.id.tv_share_adapter);
            holder.logo = (ImageView) convertView.findViewById(R.id.imageView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.name.setText(((ResolveInfo) items[position]).activityInfo
                                    .applicationInfo.loadLabel(context.getPackageManager()).toString());

        holder.logo.setImageDrawable(((ResolveInfo) items[position]).activityInfo
                                             .applicationInfo.loadIcon(context.getPackageManager()));

        return convertView;
    }
person Martin Pfeffer    schedule 01.12.2014