Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 创建有关sms消息的共享意图 背景_Android_Android Intent_Sms_Share - Fatal编程技术网

Android 创建有关sms消息的共享意图 背景

Android 创建有关sms消息的共享意图 背景,android,android-intent,sms,share,Android,Android Intent,Sms,Share,使用意图共享内容非常常见: final Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_TEXT, "msg"); shareIntent.putExtra(Intent.EXTRA_SUBJECT, "subject"); final Intent chooserIntent = Intent.cre

使用意图共享内容非常常见:

final Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, "msg");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "subject");
final Intent chooserIntent = Intent.createChooser(shareIntent, "Share using...");
startActivity(chooserIntent);
甚至可以将接收者添加到相同的共享目的:

shareIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { email });
shareIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, new String[] { phoneNumber });
问题 问题在于消息本身的内容。在短信息中,信息可能会花费金钱,因此保持短信息非常重要,以便只发送一条信息而不是多条信息

所以你可能会说,只要保持短消息,但我希望两者都能做到——为所有应用程序创建一条奇特的消息(可能添加嵌入图像和链接),除非是短信,要短消息

我所做的是创建一个带有要使用的意图的对话框,而对于sms,我只是将消息设置为更短

问题 我怎么做

我尝试了下一个代码,但由于某些原因,它没有显示短信发送的电话号码

代码如下:

创建并显示对话框:

final String phoneNumber = "12346556", email = "test@gmail.com";
final String smsMessage="sms", message="message", title="title";
final PackageManager pm = getPackageManager();
//
final Uri uri = Uri.parse("smsto:" + phoneNumber);
final Intent smsIntent = new Intent(Intent.ACTION_SENDTO, uri);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("sms_body", smsMessage);
smsIntent.putExtra("address", new String[] { phoneNumber });

final List<ResolveInfo> smsResInfo = pm.queryIntentActivities(smsIntent, 0);
final Set<String> smsPackages = new HashSet<String>();
for (final ResolveInfo ri : smsResInfo)
    smsPackages.add(ri.activityInfo.packageName + ri.activityInfo.name);
//
final Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, title);
shareIntent.putExtra(Intent.EXTRA_TEXT, message);
shareIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { email });
shareIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, new String[] { phoneNumber });
final List<ResolveInfo> shareResInfo = pm.queryIntentActivities(shareIntent, 0);
//
final List<ResolveInfo> mergedResInfo = new ArrayList<ResolveInfo>(smsResInfo);
for (final ResolveInfo resolveInfo : shareResInfo) {
    if (smsPackages.contains(resolveInfo.activityInfo.packageName + resolveInfo.activityInfo.name))
        continue;
    mergedResInfo.add(resolveInfo);
}
//
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
final String[] items = new String[mergedResInfo.size()];
for (int i = 0; i < mergedResInfo.size(); i++) {
    final ResolveInfo resolveInfo = mergedResInfo.get(i);
    items[i] = resolveInfo.loadLabel(pm).toString();
}
//
final ListAdapter adapter = new ArrayAdapterWithIcon(MainActivity.this, items, mergedResInfo);
builder.setTitle("Select app").setAdapter(adapter, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(final DialogInterface dialog, final int item) {
        final ResolveInfo resolveInfo = mergedResInfo.get(item);
        Intent intent;
        if (smsPackages.contains(resolveInfo.activityInfo.packageName + resolveInfo.activityInfo.name))
            intent = smsIntent;
        else
            intent = shareIntent;
        intent.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY
                | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        startActivity(intent);
    }
}).show();
最后一个字符串phoneNumber=“12346556”,email=”test@gmail.com";
最后一个字符串smsMessage=“sms”,message=“message”,title=“title”;
最终PackageManager pm=getPackageManager();
//
最终Uri=Uri.parse(“smsto:+phoneNumber”);
最终意图SMSINT=新意图(Intent.ACTION\u SENDTO,uri);
smsinent.setType(“vnd.android目录/mms短信”);
SMSINT.putExtra(“短信正文”,smsMessage);
putExtra(“地址”,新字符串[]{phoneNumber});
最终列表smsResInfo=pm.querytentActivities(smsIntent,0);
final Set smsPackages=新HashSet();
对于(最终解决方案信息ri:smsResInfo)
添加(ri.activityInfo.packageName+ri.activityInfo.name);
//
最终意图shareIntent=新意图(Intent.ACTION\u SEND);
shareIntent.setType(“文本/普通”);
shareIntent.putExtra(Intent.EXTRA_主题、标题);
shareIntent.putExtra(Intent.EXTRA_文本、消息);
shareIntent.putExtra(Intent.EXTRA_EMAIL,新字符串[]{EMAIL});
shareIntent.putExtra(Intent.EXTRA_PHONE_NUMBER,新字符串[]{phoneNumber});
最终列表shareResInfo=pm.QueryInputActivities(shareIntent,0);
//
最终列表mergedResInfo=新的ArrayList(smsResInfo);
对于(最终解析信息解析信息:shareResInfo){
if(smsPackages.contains(resolveInfo.activityInfo.packageName+resolveInfo.activityInfo.name))
继续;
mergedResInfo.add(resolveInfo);
}
//
final AlertDialog.Builder=新建AlertDialog.Builder(MainActivity.this);
最终字符串[]项=新字符串[mergedResInfo.size()];
对于(int i=0;i
ArrayAdapterWithIcon类:

public class ArrayAdapterWithIcon extends ArrayAdapter<String> {

    private final List<ResolveInfo> mMergedResInfo;

    public ArrayAdapterWithIcon(final MainActivity context, final String[] items,
            final List<ResolveInfo> mergedResInfo) {
        super(context, android.R.layout.select_dialog_item, items);
        this.mMergedResInfo = mergedResInfo;
    }

    @Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {
        final View view = super.getView(position, convertView, parent);
        final TextView textView = (TextView) view.findViewById(android.R.id.text1);
        final Drawable icon = mMergedResInfo.get(position).loadIcon(getPackageManager());
        textView.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
        textView.setCompoundDrawablePadding((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12,
                getContext().getResources().getDisplayMetrics()));
        return view;
    }

}
公共类ArrayAdapterWithIcon扩展了ArrayAdapter{
私人最终名单;
public ArrayAdapterWithIcon(最终主活动上下文,最终字符串[]项,
最终名单(德累斯顿信息){
super(context,android.R.layout.select\u dialog\u item,items);
this.mMergedResInfo=mergedResInfo;
}
@凌驾
公共视图getView(最终整型位置、最终视图转换视图、最终视图组父视图){
最终视图=super.getView(位置、转换视图、父视图);
final TextView TextView=(TextView)view.findViewById(android.R.id.text1);
最终可绘制图标=mMergedResInfo.get(position.loadIcon(getPackageManager());
setCompoundDrawableSwithinInstincBounds(图标,null,null,null);
textView.setCompoundDrawablePadding((int)TypedValue.applyDimension(TypedValue.COMPLEX\u UNIT\u DIP,12,
getContext().getResources().getDisplayMetrics());
返回视图;
}
}

如何修复此代码?

好的,这些行有问题:

final Intent smsIntent = new Intent(Intent.ACTION_SENDTO, uri);
smsIntent.putExtra("address", new String[] { phoneNumber });
应该是:

final Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.putExtra("address", phoneNumber);
如果您需要发送更多号码,只需在它们之间添加“,”


我还认为不需要有额外电话号码的部分。

好的,问题在于这些线路:

final Intent smsIntent = new Intent(Intent.ACTION_SENDTO, uri);
smsIntent.putExtra("address", new String[] { phoneNumber });
应该是:

final Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.putExtra("address", phoneNumber);
如果您需要发送更多号码,只需在它们之间添加“,”

我还认为不需要有额外电话号码的部分