我想取消我的短信应用程序是否为android中的默认应用程序.我正在关注本教程:
@L_403_1@
我可以通过以下代码将我的短信应用设置为默认短信应用:
Intent intent = new Intent(context, Sms.Intents.ACTION_CHANGE_DEFAulT);intent.putExtra(Sms.Intents.EXTRA_PACKAGE_name, context.getPackagename());startActivity(intent);
但我想取消我的短信应用程序作为默认应用程序.我怎样才能做到这一点?
这里有一点需要注意:我已经安装了消息传递经典应用程序.从那个应用程序,我可以取消我的短信应用程序默认.
解决方法:
在你仔细阅读这个答案之前,你可能会看一下this much simpler option(我希望在使用这个之前我想过).如果您想让用户选择要设置的应用程序,而不是允许系统恢复到它所决定的任何一个应用程序,那么这个答案仍然很方便.
要取消选择您的应用作为默认短信应用,您可以让用户选择另一个符合条件的应用作为默认应用代替您的应用,并使用该包名激发ACTION_CHANGE_DEFAulT意图.
为了简化这个过程,我编写了selectDefaultSmsPackage()方法,该方法将找到所有接受“androID.provIDer.Telephony.SMS_DEliVER”广播(不包括当前包)的应用程序,并提示用户提供可供选择的列表.这是一个相当天真的过滤标准,但最糟糕的情况是所选应用程序不会被成功设置为默认值.
从列表中选择所需的应用程序后,将显示通常的是/否验证对话框.当Activity收到结果时,会将所选应用程序的程序包名称与当前设置为默认值的程序包名称进行比较,以确定是否成功.由于某些用户报告在这种情况下结果代码不可靠,因此检查当前默认值是保证正确成功结果的唯一方法.
我们将使用自定义对话框列出符合条件的应用程序的显示名称和图标.创建AppsDialog的Activity必须实现其OnAppSelectedListener接口.
public class MainActivity extends Activity implements AppsDialog.OnAppSelectedListener { ... private static final int DEF_SMS_REQ = 0; private AppInfo selectedApp; private voID selectDefaultSmsPackage() { final List<ResolveInfo> receivers = getPackageManager(). querybroadcastReceivers(new Intent(Sms.Intents.SMS_DEliVER_ACTION), 0); final ArrayList<AppInfo> apps = new ArrayList<>(); for (ResolveInfo info : receivers) { final String packagename = info.activityInfo.packagename; if (!packagename.equals(getPackagename())) { final String appname = getPackageManager() .getApplicationLabel(info.activityInfo.applicationInfo) .toString(); final Drawable icon = getPackageManager() .getApplicationIcon(info.activityInfo.applicationInfo); apps.add(new AppInfo(packagename, appname, icon)); } } Collections.sort(apps, new Comparator<AppInfo>() { @OverrIDe public int compare(AppInfo app1, AppInfo app2) { return app1.appname.compareto(app2.appname); } } ); new AppsDialog(this, apps).show(); } @OverrIDe public voID onAppSelected(AppInfo selectedApp) { this.selectedApp = selectedApp; Intent intent = new Intent(Sms.Intents.ACTION_CHANGE_DEFAulT); intent.putExtra(Sms.Intents.EXTRA_PACKAGE_name, selectedApp.packagename); startActivityForResult(intent, DEF_SMS_REQ); } @OverrIDe protected voID onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case DEF_SMS_REQ: String currentDefault = Sms.getDefaultSmsPackage(this); boolean isDefault = selectedApp.packagename.equals(currentDefault); String msg = selectedApp.appname + (isDefault ? " successfully set as default" : " not set as default"); Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); break; ... } }
我们需要以下POJO类来保存相关的应用信息.
public class AppInfo { String appname; String packagename; Drawable icon; public AppInfo(String packagename, String appname, Drawable icon) { this.packagename = packagename; this.appname = appname; this.icon = icon; } @OverrIDe public String toString() { return appname; }}
AppsDialog类创建可用默认值的简单ListVIEw,并通过界面将选择传递回Activity.
public class AppsDialog extends Dialog implements OnItemClickListener { public interface OnAppSelectedListener { public voID onAppSelected(AppInfo selectedApp); } private final Context context; private final List<AppInfo> apps; public AppsDialog(Context context, List<AppInfo> apps) { super(context); if (!(context instanceof OnAppSelectedListener)) { throw new IllegalArgumentException( "Activity must implement OnAppSelectedListener interface"); } this.context = context; this.apps = apps; } @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle("Select default SMS app"); final ListVIEw ListVIEw = new ListVIEw(context); ListVIEw.setAdapter(new AppsAdapter(context, apps)); ListVIEw.setonItemClickListener(this); setContentVIEw(ListVIEw); } @OverrIDe public voID onItemClick(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID) { ((OnAppSelectedListener) context).onAppSelected(apps.get(position)); dismiss(); } private class AppsAdapter extends ArrayAdapter<AppInfo> { public AppsAdapter(Context context, List<AppInfo> List) { super(context, R.layout.List_item, R.ID.text, List); } public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) { final AppInfo item = getItem(position); VIEw v = super.getVIEw(position, convertVIEw, parent); ((ImageVIEw) v.findVIEwByID(R.ID.icon)).setimageDrawable(item.icon); return v; } }}
ArrayAdapter使用以下项布局List_item.
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:gravity="center_vertical" androID:paddingtop="1dp" androID:paddingBottom="1dp" androID:paddingStart="8dp" androID:paddingEnd="8dp"> <ImageVIEw androID:ID="@+ID/icon" androID:layout_wIDth="36dp" androID:layout_height="36dp" /> <TextVIEw androID:ID="@+ID/text" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:gravity="center_vertical" androID:textAppearance="?androID:attr/textAppearanceListItemSmall" androID:paddingStart="?androID:attr/ListPreferredItempaddingStart" androID:paddingEnd="?androID:attr/ListPreferredItempaddingEnd" androID:minHeight="?androID:attr/ListPreferredItemHeightSmall" androID:ellipsize="marquee" /></linearLayout>
总结 以上是内存溢出为你收集整理的如何取消我的短信应用程序作为Android中的默认应用程序全部内容,希望文章能够帮你解决如何取消我的短信应用程序作为Android中的默认应用程序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)