android中關於圖片分享到QQ或者微信,朋友圈及其他(免SDK)
最近又做了一個關於圖片分享到朋友圈的一個小功能,起先想到的是要新增比如QQ 或者微信以及其他工具的API,但是很麻煩,還要申請一些亂七八糟的東西並且得通過,才能用。
於是就在網上找一些關於圖片分享的資料,僅供參考(親測可用),,僅限圖片的分享,但是免去了上面所說的那些繁瑣的過程。話不多說,如下:
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Dialog; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.Color; import android.graphics.Point; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.util.DisplayMetrics; import android.util.Patterns; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; @SuppressLint("NewApi") public class AndroidShare extends Dialog implements AdapterView.OnItemClickListener { private LinearLayout mLayout; private GridView mGridView; private float mDensity; private String msgText = "共享"; private String mImgPath; private int mScreenOrientation; private List<ShareItem> mListData; private Handler mHandler = new Handler(); private Runnable work = new Runnable() { public void run() { int orient = getScreenOrientation(); if (orient != mScreenOrientation) { if (orient == 0) mGridView.setNumColumns(4); else { mGridView.setNumColumns(6); } mScreenOrientation = orient; ((AndroidShare.MyAdapter) mGridView.getAdapter()).notifyDataSetChanged(); } mHandler.postDelayed(this, 1000L); } }; public AndroidShare(Context context) { super(context, R.style.shareDialogTheme); } public AndroidShare(Context context, int theme, String msgText, final String imgUri) { super(context, theme); this.msgText = msgText; if (Patterns.WEB_URL.matcher(imgUri).matches()) new Thread(new Runnable() { public void run() { try { mImgPath = getImagePath(imgUri, getFileCache()); } catch (Exception e) { e.printStackTrace(); } } }).start(); else this.mImgPath = imgUri; } public AndroidShare(Context context, String msgText, final String imgUri) { super(context, R.style.shareDialogTheme); this.msgText = msgText; if (Patterns.WEB_URL.matcher(imgUri).matches()) new Thread(new Runnable() { public void run() { try { mImgPath = getImagePath(imgUri,getFileCache()); } catch (Exception e) { e.printStackTrace(); } } }).start(); else this.mImgPath = imgUri; } void init(Context context) { DisplayMetrics dm = new DisplayMetrics(); dm = context.getResources().getDisplayMetrics(); this.mDensity = dm.density; this.mListData = new ArrayList<ShareItem>(); this.mListData.add(new ShareItem("微信", R.drawable.logo_wechat, "com.tencent.mm.ui.tools.ShareImgUI", "com.tencent.mm")); this.mListData.add(new ShareItem("朋友圈", R.drawable.logo_wechatmoments, "com.tencent.mm.ui.tools.ShareToTimeLineUI", "com.tencent.mm")); this.mListData.add(new ShareItem("QQ", R.drawable.logo_qq, "com.tencent.mobileqq.activity.JumpActivity","com.tencent.mobileqq")); this.mListData.add(new ShareItem("其他", R.drawable.logo_other, "","")); this.mLayout = new LinearLayout(context); this.mLayout.setOrientation(1); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-1, -2); params.leftMargin = ((int) (10.0F * this.mDensity)); params.rightMargin = ((int) (10.0F * this.mDensity)); this.mLayout.setLayoutParams(params); this.mLayout.setBackgroundColor(Color.parseColor("#D9DEDF")); this.mGridView = new GridView(context); this.mGridView.setLayoutParams(new ViewGroup.LayoutParams(-1, -2)); this.mGridView.setGravity(17); this.mGridView.setHorizontalSpacing((int) (10.0F * this.mDensity)); this.mGridView.setVerticalSpacing((int) (10.0F * this.mDensity)); this.mGridView.setStretchMode(1); this.mGridView.setColumnWidth((int) (90.0F * this.mDensity)); this.mGridView.setHorizontalScrollBarEnabled(false); this.mGridView.setVerticalScrollBarEnabled(false); this.mLayout.addView(this.mGridView); } public List<ComponentName> queryPackage() { List<ComponentName> cns = new ArrayList<ComponentName>(); Intent i = new Intent("android.intent.action.SEND"); i.setType("image/*"); List<ResolveInfo> resolveInfo = getContext().getPackageManager().queryIntentActivities(i, 0); for (ResolveInfo info : resolveInfo) { ActivityInfo ac = info.activityInfo; ComponentName cn = new ComponentName(ac.packageName, ac.name); cns.add(cn); } return cns; } public boolean isAvilible(Context context, String packageName) { PackageManager packageManager = context.getPackageManager(); List<PackageInfo> pinfo = packageManager.getInstalledPackages(0); for (int i = 0; i < pinfo.size(); i++) { if (((PackageInfo) pinfo.get(i)).packageName.equalsIgnoreCase(packageName)) return true; } return false; } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Context context = getContext(); init(context); setContentView(this.mLayout); getWindow().setGravity(80); if (getScreenOrientation() == 0) { this.mScreenOrientation = 0; this.mGridView.setNumColumns(4); } else { this.mGridView.setNumColumns(6); this.mScreenOrientation = 1; } this.mGridView.setAdapter(new MyAdapter()); this.mGridView.setOnItemClickListener(this); this.mHandler.postDelayed(this.work, 1000L); setOnDismissListener(new DialogInterface.OnDismissListener() { public void onDismiss(DialogInterface dialog) { mHandler.removeCallbacks(work); } }); } public void show() { super.show(); } public int getScreenOrientation() { int landscape = 0; int portrait = 1; Point pt = new Point(); getWindow().getWindowManager().getDefaultDisplay().getSize(pt); int width = pt.x; int height = pt.y; return width > height ? portrait : landscape; } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ShareItem share = (ShareItem) this.mListData.get(position); shareMsg(getContext(), "共享", this.msgText, this.mImgPath, share); } @SuppressLint("NewApi") @TargetApi(Build.VERSION_CODES.GINGERBREAD) private void shareMsg(Context context, String msgTitle, String msgText, String imgPath, ShareItem share) { if (!share.packageName.isEmpty() && !isAvilible(getContext(), share.packageName)) { Toast.makeText(getContext(), "未安裝" + share.title, Toast.LENGTH_SHORT).show(); return; } Intent intent = new Intent("android.intent.action.SEND"); if ((imgPath == null) || (imgPath.equals(""))) { intent.setType("text/plain"); } else { File f = new File(imgPath); if ((f != null) && (f.exists()) && (f.isFile())) { intent.setType("image/png"); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); } } intent.putExtra(Intent.EXTRA_SUBJECT, msgTitle); intent.putExtra(Intent.EXTRA_TEXT, msgText); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if(!share.packageName.isEmpty()) { intent.setComponent(new ComponentName(share.packageName,share.activityName)); context.startActivity(intent); } else { context.startActivity(Intent.createChooser(intent, msgTitle)); } } private File getFileCache() { File cache = null; if (Environment.getExternalStorageState().equals("mounted")) cache = new File(Environment.getExternalStorageDirectory() + "/." + getContext().getPackageName()); else { cache = new File(getContext().getCacheDir().getAbsolutePath() + "/." + getContext().getPackageName()); } if ((cache != null) && (!cache.exists())) { cache.mkdirs(); } return cache; } public String getImagePath(String imageUrl, File cache) throws Exception { String name = imageUrl.hashCode() + imageUrl.substring(imageUrl.lastIndexOf(".")); File file = new File(cache, name); if (file.exists()) { return file.getAbsolutePath(); } URL url = new URL(imageUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); conn.setDoInput(true); if (conn.getResponseCode() == 200) { InputStream is = conn.getInputStream(); FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); } is.close(); fos.close(); return file.getAbsolutePath(); } return null; } private final class MyAdapter extends BaseAdapter { private static final int image_id = 256; private static final int tv_id = 512; public MyAdapter() { } public int getCount() { return mListData.size(); } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0L; } private View getItemView() { LinearLayout item = new LinearLayout(getContext()); item.setOrientation(1); int padding = (int) (10.0F * mDensity); item.setPadding(padding, padding, padding, padding); item.setGravity(17); ImageView iv = new ImageView(getContext()); item.addView(iv); iv.setLayoutParams(new LinearLayout.LayoutParams(-2, -2)); iv.setId(image_id); TextView tv = new TextView(getContext()); item.addView(tv); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(-2, -2); layoutParams.topMargin = ((int) (5.0F * mDensity)); tv.setLayoutParams(layoutParams); tv.setTextColor(Color.parseColor("#212121")); tv.setTextSize(16.0F); tv.setId(tv_id); return item; } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = getItemView(); } ImageView iv = (ImageView) convertView.findViewById(image_id); TextView tv = (TextView) convertView.findViewById(tv_id); AndroidShare.ShareItem item = (AndroidShare.ShareItem) mListData.get(position); iv.setImageResource(item.logo); tv.setText(item.title); return convertView; } } private class ShareItem { String title; int logo; String activityName; String packageName; public ShareItem(String title, int logo, String activityName, String packageName) { this.title = title; this.logo = logo; this.activityName = activityName; this.packageName = packageName; } }
在介面的分享功能新增事件
AndroidShare as = new AndroidShare(
MainActivity.this,
"測試分享",
pathString+name);
as.show();
最後,記得要在清單檔案中新增一些許可權
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
相關推薦
android中關於圖片分享到QQ或者微信,朋友圈及其他(免SDK)
最近又做了一個關於圖片分享到朋友圈的一個小功能,起先想到的是要新增比如QQ 或者微信以及其他工具的API,但是很麻煩,還要申請一些亂七八糟的東西並且得通過,才能用。 於是就在網上找一些關於圖片分享的資料,僅供參考(親測可用),,僅限圖片的分享,但是免去了上面所說的那些繁瑣
友盟分享(qq,qzone,微信,朋友圈)
時間:2017.6.6 事件:寫關於分享方面的功能 工具:Android Studio(2.2) http://dev.umeng.com/social/android/quick-integration進入友盟平臺,按照文件進行操作。可以執行。但是發現一些問題: 1、如
用sharesdk第三方等陸或分享到QQ空間,qq好友,微信,朋友圈,新浪微博,騰訊微博等
公司最近不景氣,辭職後的日子剛開始還挺嗨皮,過兩天閒的蛋都碎了,都四月份了,還是領到畢業證在找吧。。。。。。 不扯淡了,專案中經常有第三方等陸或者分享的功能,以下是我用sharesdk實現的步驟。。 1 使用第三方前,匯入MainLibs/libs中相應
友盟分享QQ,微信,朋友圈和微博的坑
其實說起來友盟的文件非常完善,開發文件有點小問題,但大多問題錯誤必看部分都有補充,是我目前看到最有良心的第三方了,這裡默默點個贊。以下內容只為了下次開發用到時能夠少走彎路。 1.文件中多了一個Activity [ 新浪: <ac
Android一鍵轉發圖片多張圖片到微信,朋友圈功能實現
效果圖 一鍵轉發按鈕,直接把多張圖片拉起朋友圈,自動填充圖片,或者多張圖片發給好友,文字可以複製過去直接貼上, 實現思路: 1.先把介面請求下來的多張圖片儲存到本地,這裡是用Glide做的本地快取 //快取圖片到本地 for (int i = 0; i < imag
Android 調用系統分享文字、圖片、文件,可直達微信、朋友圈、QQ、QQ空間、微博
gem 朋友 con vmpolicy false 錯誤 區分 指定 如果 原文:Android 調用系統分享文字、圖片、文件,可直達微信、朋友圈、QQ、QQ空間、微博 兼容SDK
Android端IM應用中的@人功能實現:仿微博、QQ、微信,零入侵、高可擴充套件
本文由“貓爸iYao”原創分享,感謝作者。 1、引言 最近有個需求:評論@人(沒錯,就是IM聊天或者微博APP裡的@人功能),就像下圖這樣: ▲ 微信群聊介面裡的@人功能 ▲ QQ群聊介面裡的@人功能 網上已經有一些文章分享了類似功能實現邏輯,但是幾乎都是
Android使用ShareSDK整合QQ、微信、微博等第三方分享
前言 第三方分享幾乎是每個APP的必須功能。有些人說看官方的文件實在讓人眼花繚亂,以前自己第一次做這些功能的時候也會遇到很多坑。這裡整理了一份比較詳細的,主要給新手學習。有任何問題歡迎提出來! 1、獲取ShareSDK的AppKey 2
android中微信、朋友圈分享無回撥的問題
如果在您的專案中集成了微信或者微信朋友圈,並且您需要準確的分享回撥,則需要在AndroidManifest.xml中下注冊下面的回撥Activity。 <activity android:name=".wxapi.WXEntryActivity
[h5+api]移動app開發用到的微信好友,朋友圈,qq好友,新浪微博分享合集
適用H5+環境,能夠使用plus方法的移動app中 /** * Created by HBuilder. * User: tyx * Date: 2018-11-21 * Time: 17:28:51 */ /** * 初始化分享服務 */ //---------------H5 pl
【Android】中微信搶紅包助手的實現(程式碼整理)
實現原理 通過利用AccessibilityService輔助服務,監測螢幕內容,如監聽狀態列的資訊,螢幕跳轉等,以此來實現自動拆紅包的功能。關於AccessibilityService輔助服務,可以自行百度瞭解更多。 程式碼基礎: 1.首先宣告一個RedPac
H5判斷是否為QQ或者微信
function is_weixn_qq(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger\/[0-9]/i)){ return "weixin"; } if(ua.matc
Android 廣告(banner)圖片輪播、圖片瀏覽、仿微信大圖檢視控制元件(支援視訊和gif圖片)、支援動態新增資料
之前專案需要做個仿微信檢視大圖,需要新增圓形下載進度,支援視訊和圖片切換等一系列功能控制元件,自己抽空把開發的自定義控制元件的成果重新構造、整理處理封裝成庫(aar),提供出來,有需要朋友,歡迎使用,如果有什麼建議歡迎留言或者GitHub上提issues
Android 高仿微信發朋友圈瀏覽圖片效果
最近一直在高仿微信、高仿微信,今天小編再給大家分享一個仿微信發朋友圈瀏覽圖片的效果.... 好了,先看一下效果吧: 下面就來說一下具體怎麼實現的: 實現思路 1.首先我們要獲取資料來源,資料來源就是我們的每條說說(包括姓名、標題、圖片陣列)
Android學習之Android 5.0分享動畫實現微信點選全屏效果
Android5.0過渡動畫,請看 今天用分享動畫實現微信點選全屏效果 本文原始碼下載地址 peizhi 配置 build.gradle: compile 'com.android.support:recyclerview-v7:23.
手機端如何實現在QQ或者微信自帶瀏覽器開啟連結後自動跳轉到預設瀏覽器開啟?
很多朋友的APP推廣連結需要在微信中進行的網頁宣傳、傳播、下載等等,但是各位朋友一定發現了微信中是遮蔽掉了APP的下載連結的。但是微信最為一個最大的社交平臺,為了自身的利益,遮蔽掉了所有APK的下載連結。我們要怎麼解決這個問題呢? 解決方案: 我們基於微信介面開發了一款全
Android使用ShareSDK整合QQ、微信、微博等第三方登入
前言 第三方登入幾乎是每個APP的必須功能。有些人說看官方的文件實在讓人眼花繚亂,以前自己第一次做這些功能的時候也會遇到很多坑。這裡整理了一份比較詳細的,主要給新手學習。有任何問題歡迎提出來! 1、獲取ShareSDK的AppKey 2
web網頁外部分享到微信、朋友圈、扣扣、微博等功能、自動生成二維碼等
真的是 nan color 接口 blog har sum height summary 1、這裏重中之重是分享到微信:web端網頁通常是沒有權限分享過去的 所以用: weixin://dl/business/?ticket=ta428dhj739hg3efe6e
電腦能登入QQ和微信,但是打不開網頁瀏覽器
工具:電腦管家 分析:電腦不能上網的原因有很多,而電腦管家可以診斷電腦網頁打不開的原因,並進行修復,這中傻瓜式的操作,為我們省去很多時間去找原因。 步驟: 開啟電腦管家——工具箱——網路修復——立即修復——“提示:修復此項可能會關閉IE”點選確定 立即修復:
微信授權登陸接入第三方App(步驟總結)Android
這幾天開發要用到微信授權的功能,所以就研究了一下。可是微信開放平臺接入指南里有幾個地方寫的不清不楚。在此總結一下,以便需要的人。 很多微信公眾平臺的應用如果移植到app上的話就需要微信授權登陸了。 目前移動應用上微信登入只提供原生的登入方式,需要使用者安裝微信客戶端才能配合使用。也就是如果第三