Android 自定義分享列表ACTION_SEND

一、佈局:
popup_share.xml
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content" >  
  <ListView   
        android:id="@+id/share_list"   
        android:background="#2F4F4F"   
        android:fadingEdge="none"   
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:cacheColorHint="#00000000"   
        android:divider="#E2DD75"   
        android:dividerHeight="1.0dip"   
        android:headerDividersEnabled="true"   
        android:footerDividersEnabled="false" />  
</LinearLayout>
popup_share_item.xml
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:gravity="center_vertical"   
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:padding="2.0dip" >  
    <ImageView   
        android:id="@+id/share_item_icon"   
        android:layout_width="32.0dip"   
        android:layout_height="32.0dip"   
        android:layout_marginLeft="3.0dip"   
        android:scaleType="fitXY" />  
    <TextView   
        android:id="@+id/share_item_name"   
        android:gravity="center"   
        android:layout_width="wrap_content"   
        android:layout_height="wrap_content"   
        android:text="分享"   
        android:textColor="@color/white"   
        android:singleLine="true"   
        android:textSize="@dimen/s_size"   
        android:layout_marginLeft="3.0dip"   
        android:layout_marginRight="3.0dip" />  
</LinearLayout>
二、查詢手機內全部支持分享的應用列表

public List<ResolveInfo> getShareApps(Context context) {    
        List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();  
        Intent intent = new Intent(Intent.ACTION_SEND, null);  
        intent.addCategory(Intent.CATEGORY_DEFAULT);  
        intent.setType("text/plain");  
//      intent.setType("*/*");   
        PackageManager pManager = context.getPackageManager();  
        mApps = pManager.queryIntentActivities(intent,   
                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);  
        return mApps;  
    }
注:ApplicationInfo是從一個特定的應用獲得的信息。這些信息是從相對應的Androdimanifest.xml的< application>標籤中收集到的。
ResolveInfo這個類是經過解析一個與IntentFilter相對應的intent獲得的信息。它部分地對應於從AndroidManifest.xml的< intent>標籤收集到的信息。
獲得List列表,我自建的AppInfo類,本身建一個就行
private List<AppInfo> getShareAppList() {   
        List<AppInfo> shareAppInfos = new ArrayList<AppInfo>();  
        PackageManager packageManager = getPackageManager();  
        List<ResolveInfo> resolveInfos = getShareApps(mContext);  
        if (null == resolveInfos) {  
            return null;  
        } else {  
            for (ResolveInfo resolveInfo : resolveInfos) {  
                AppInfo appInfo = new AppInfo();  
                appInfo.setAppPkgName(resolveInfo.activityInfo.packageName);  
//              showLog_I(TAG, "pkg>" + resolveInfo.activityInfo.packageName + ";name>" + resolveInfo.activityInfo.name);   
                appInfo.setAppLauncherClassName(resolveInfo.activityInfo.name);  
                appInfo.setAppName(resolveInfo.loadLabel(packageManager).toString());  
                appInfo.setAppIcon(resolveInfo.loadIcon(packageManager));  
                shareAppInfos.add(appInfo);  
            }  
        }         
        return shareAppInfos;  
    }
三、彈出PopupWindow的實現

private void initSharePopupWindow(View parent) {  
        PopupWindow sharePopupWindow = null;  
        View view = null;  
        ListView shareList = null;  
        if(null == sharePopupWindow) {  
            //加載佈局文件   
            view = LayoutInflater.from(DetailExchangeActivity.this).inflate(R.layout.popup_share, null);  
            shareList = (ListView) view.findViewById(R.id.share_list);  
            List<AppInfo> shareAppInfos = getShareAppList();  
            final ShareCustomAdapter adapter = new ShareCustomAdapter(mContext, shareAppInfos);  
            shareList.setAdapter(adapter);  
              
            shareList.setOnItemClickListener(new OnItemClickListener() {  
  
                @Override  
                public void onItemClick(AdapterView<?> parent, View view,  
                        int position, long id) {  
                    // TODO Auto-generated method stub   
                    Intent shareIntent = new Intent(Intent.ACTION_SEND);  
                    AppInfo appInfo = (AppInfo) adapter.getItem(position);  
                    shareIntent.setComponent(new ComponentName(appInfo.getAppPkgName(), appInfo.getAppLauncherClassName()));  
                    shareIntent.setType("text/plain");  
//                  shareIntent.setType("*/*");   
                    //這裏就是組織內容了,   
                    shareIntent.putExtra(Intent.EXTRA_TEXT, "測試,這裏發送推廣地址");  
                    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
                    DetailExchangeActivity.this.startActivity(shareIntent);  
                }  
            });  
              
            sharePopupWindow = new PopupWindow(view,   
                    (int)(160 * density), LinearLayout.LayoutParams.WRAP_CONTENT);  
        }  
        //使其聚焦   
        sharePopupWindow.setFocusable(true);  
        //設置容許在外點擊消失   
        sharePopupWindow.setOutsideTouchable(true);  
        // 這個是爲了點擊「返回Back」也能使其消失,而且並不會影響你的背景   
        sharePopupWindow.setBackgroundDrawable(new BitmapDrawable());  
        //xoff,yoff基於anchor的左下角進行偏移。正數表示下方右邊,負數表示(上方左邊)   
        //showAsDropDown(parent, xPos, yPos);   
        sharePopupWindow.showAsDropDown(parent, -5, 5);  
    }
相關文章
相關標籤/搜索