Android 分享功能的實(shí)現(xiàn)代碼
Android 分享功能的實(shí)現(xiàn)代碼
一個(gè)Activity中,取出設(shè)備上安裝的所有支持分享動(dòng)作的Activity,在grid中顯示。
實(shí)例代碼:
/**
* 分享activity
*/
public class NShareActivity extends AppCompatActivity {
public final static String EXTRA_STR_TO_SHARE="str_to_share1";
private class SharedPkgInfo{
String pkgName;
Drawable icon;
String appName;
String activityClassName;
}
class Vh extends RecyclerView.ViewHolder {
TextView tv;
ImageView iv;
public Vh(View itemView) {
super(itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//點(diǎn)擊了某個(gè)app的圖標(biāo),用選擇的app分享內(nèi)容
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("text/*");
share.putExtra(Intent.EXTRA_SUBJECT, "分享");
share.putExtra(Intent.EXTRA_TEXT,NShareActivity.this.strToShare);
//share.putExtra(Intent.EXTRA_STREAM, uri); // Optional, just if you wanna share an image.
SharedPkgInfo pi = sharePkgInfo.get(getAdapterPosition());
share.setClassName(pi.pkgName,pi.activityClassName);
//share.setPackage();
startActivity(share);
}
});
}
}
//獲取支持供享的包的信息
List<SharedPkgInfo> sharePkgInfo=new ArrayList<>();
//要分享出去的文本放在這里
private String strToShare=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent= this.getIntent();
strToShare = intent.getStringExtra(EXTRA_STR_TO_SHARE);
getAllSharePackages();
//將可共享的app圖標(biāo)都放在一個(gè)gridview中
RecyclerView v=new RecyclerView(this);
v.setPadding(16,16,16,16);
GridLayoutManager lm=new GridLayoutManager(this,4);
v.setLayoutManager(lm);
v.setAdapter(new RecyclerView.Adapter<Vh>()
{
@Override
public Vh onCreateViewHolder(ViewGroup parent, int viewType) {
//必須創(chuàng)建新的view holder
LinearLayout v=new LinearLayout(NShareActivity.this);
v.setPadding(8,8,8,8);
Vh vh=new Vh(v);
//先創(chuàng)建item view:上面一個(gè)圖標(biāo),下面一個(gè)文本
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
v.setOrientation(LinearLayout.VERTICAL);
v.setLayoutParams(lp);
ImageView imgv=new ImageView(NShareActivity.this);
imgv.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
120));
TextView tv=new TextView(NShareActivity.this);
tv.setGravity(Gravity.CENTER);
v.addView(imgv);
v.addView(tv);
vh.tv=tv;
vh.iv=imgv;
return vh;
}
@Override
public void onBindViewHolder(Vh holder, int position) {
//將視圖與數(shù)據(jù)綁定
SharedPkgInfo spi=sharePkgInfo.get(position);
holder.tv.setText(spi.appName);
holder.iv.setImageDrawable(spi.icon);
}
@Override
public int getItemCount() {
return sharePkgInfo.size();
}
});
v.setBackgroundColor(Color.WHITE);
this.setContentView(v);
}
//獲取所有支持send Action的包名和圖片
void getAllSharePackages()
{
Intent share = new Intent(android.content.Intent.ACTION_SEND);
//分析網(wǎng)站地址的話用這個(gè):
//intent.setType("text/plain"); //純文本
share.setType("text/*");
// gets the list of intents that can be loaded.
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0);
if (!resInfo.isEmpty()) {
for (ResolveInfo info : resInfo) {
SharedPkgInfo spi = new SharedPkgInfo();
spi.pkgName = info.activityInfo.packageName;
spi.icon = info.loadIcon(getPackageManager());
spi.appName = info.loadLabel(getPackageManager()).toString();
spi.activityClassName=info.activityInfo.name;
sharePkgInfo.add(spi);
//Log.w("shared",spi.pkgName+" , "+spi.appName+","+info.activityInfo.name);
}
}
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Android開發(fā)EditText實(shí)現(xiàn)密碼顯示隱藏
這篇文章主要為大家詳細(xì)介紹了Android開發(fā)EditText實(shí)現(xiàn)密碼顯示隱藏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
AlertDialog點(diǎn)擊按鈕不消失的實(shí)現(xiàn)方法
我有一個(gè)文本輸入對(duì)話框,當(dāng)我點(diǎn)擊對(duì)話框上的“是”按鈕,它會(huì)驗(yàn)證輸入,然后關(guān)閉對(duì)話框,但是,如果輸入錯(cuò)誤,我想停留在同一個(gè)對(duì)話框中。怎么實(shí)現(xiàn)此功能呢?下面通過本文給大家分享下2017-01-01
Android編程獲取設(shè)備MAC地址的實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程獲取設(shè)備MAC地址的實(shí)現(xiàn)方法,涉及Android針對(duì)硬件設(shè)備的操作技巧,需要的朋友可以參考下2017-01-01
Android實(shí)現(xiàn)日期時(shí)間選擇對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)日期以及時(shí)間選擇對(duì)話框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Android開發(fā)使用ProgressBar實(shí)現(xiàn)進(jìn)度條功能示例
這篇文章主要介紹了Android開發(fā)使用ProgressBar實(shí)現(xiàn)進(jìn)度條功能,結(jié)合實(shí)例形式分析了Android進(jìn)度條ProgressBar的具體樣式、布局與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-03-03
詳解Android中用于線程處理的AsyncTask類的用法及源碼
這篇文章主要介紹了Android中用于線程處理的AsyncTask類的用法及源碼,講到了實(shí)現(xiàn)AsyncTask中所用到的Handler及線程池等要點(diǎn),需要的朋友可以參考下2016-05-05

