如何在android中以编程方式将sms应用程序设置为默认应用程序

时间:2015-10-01 11:02:20

标签: android

我开发了一个Android应用程序,用于从特定号码接收短信。它可以将sms标记为从该数字读取。要将sms标记为已读,应用程序需要设置为默认值。如何以编程方式在Android中将应用程序设置为默认值?

6 个答案:

答案 0 :(得分:6)

据我了解,您需要在启动应用程序时要求用户将您的应用程序设置为默认消息传递应用程序。为此,请使用以下代码:

intent-filter下设置要显示的活动。在这种情况下,我考虑了“ DefaultSMSAppChooserActivity”

<activity android:name=".DefaultSMSAppChooserActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.APP_MESSAGING" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

调用以下方法以显示他/她的设备上的所有可用消息传递应用程序,包括您可以选择的默认应用程序。

public static void openSMSappChooser(Context context) {
    PackageManager packageManager = context.getPackageManager();
    ComponentName componentName = new ComponentName(context, DefaultSMSAppChooserActivity.class);
    packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

    Intent selector = new Intent(Intent.ACTION_MAIN);
    selector.addCategory(Intent.CATEGORY_APP_MESSAGING);
    selector.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(selector);

    packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
}

您可以根据需要在任何地方使用以上方法。

希望这对您有帮助!

答案 1 :(得分:5)

你不能。

第三方开发者无法将自己的应用设置为默认应用。只有您应用的用户才能在自己的设备上执行此操作。

无论如何,您都可以通过Intent过滤器注册应用程序以充当消息传递应用程序

答案 2 :(得分:4)

在您的清单文件中声明此内容

<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/sms" />
</intent-filter>

我不确定mime类型,但请检查正确的mime类型以进行消息传递,因为它非常重要。

答案 3 :(得分:4)

您可以复制粘贴来自官方谷歌信使的清单,以检查它是否正常工作link

<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="vnd.android-dir/mms-sms" />
</intent-filter>

答案 4 :(得分:0)

您可以使用以下IntentstartActivitystartActivity(Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT).putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName)) 直接从应用程序内部生成框架对话框,以要求将其设置为默认消息传递应用程序:-

class CarDetector(object):
    def __init__(self):

        self.car_boxes = []
        self.ped_boxes = []
        os.chdir(cwd)

        #Tensorflow localization/detection model
        # Single-shot-dectection with mobile net architecture trained on COCO dataset

        detect_model_name = 'ssd_mobilenet_v1_coco_11_06_2017'

        PATH_TO_CKPT = detect_model_name + '/frozen_inference_graph.pb'

        # setup tensorflow graph
        self.detection_graph = tf.Graph()

        # the tensorflow graph
        with self.detection_graph.as_default():
            od_graph_def = tf.GraphDef()
            with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
               serialized_graph = fid.read()
               od_graph_def.ParseFromString(serialized_graph)
               tf.import_graph_def(od_graph_def, name='')

            self.sess = tf.Session(graph=self.detection_graph,config=tf.ConfigProto())

            self.image_tensor = self.detection_graph.get_tensor_by_name('image_tensor:0')
              # Each box represents a part of the image where a particular object was detected.
            self.boxes = self.detection_graph.get_tensor_by_name('detection_boxes:0')
              # Each score represent how level of confidence for each of the objects.
              # Score is shown on the result image, together with the class label.
            self.scores =self.detection_graph.get_tensor_by_name('detection_scores:0')
            self.classes = self.detection_graph.get_tensor_by_name('detection_classes:0')
            self.num_detections =self.detection_graph.get_tensor_by_name('num_detections:0')

答案 5 :(得分:0)

您不能强行执行此操作,您也不能这样做。您可以做的是让您的应用程序可以打开文件类型。用户将获得标准的“您希望使用什么程序”对话框,并且用户可以选择一些默认设置。如果用户已经选择了默认设置,则他/她需要在对话框出现之前撤消该设置(很明显,否则,“默认设置”不会产生很大的影响,现在会生效吗?)