由于默认短信应用程序在4.4中添加,我无法打开这样的默认短信应用程序:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);
那我怎么能得到默认短信应用的包名,所以我可以直接在我的应用中打开它?
答案 0 :(得分:8)
接受的答案对我不起作用(而且似乎相当不可靠)。
获取包名称的更好方法是
Telephony.Sms.getDefaultSmsPackage(context);
这需要API 19 +
答案 1 :(得分:6)
public static final String SMS_DEFAULT_APPLICATION =" sms_default_application";
if(Utils.hasKikKat()) {
String defaultApplication = Settings.Secure.getString(getContentResolver(), SMS_DEFAULT_APPLICATION);
PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(defaultApplication );
if (intent != null) {
context.startActivity(intent);
}
} else {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);
}
答案 2 :(得分:3)
这是你如何做到的:
@Nullable
public static String getDefaultSmsAppPackageName(@NonNull Context context) {
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT)
return Telephony.Sms.getDefaultSmsPackage(context);
else {
Intent intent = new Intent(Intent.ACTION_VIEW)
.addCategory(Intent.CATEGORY_DEFAULT).setType("vnd.android-dir/mms-sms");
final List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, 0);
if (resolveInfos != null && !resolveInfos.isEmpty())
return resolveInfos.get(0).activityInfo.packageName;
return null;
}
}