Android> 4.4.2 - 设置默认SMS应用程序

时间:2014-08-08 18:21:12

标签: android android-4.4-kitkat

我已经完成了允许Android将应用识别为潜在的默认消息(SMS / MMS)应用详细here所需的步骤,并且我已经关注了SO上的几个帖子 - 回复到博客帖子中列出的说明的投票答案。

然而,即使遵循这些说明,我相信我已经这样做了,我仍然无法让我的应用程序显示在系统对话框中,这将允许我选择我想要的应用程序作为默认消息客户。我情不自禁地觉得我仍然在清单中遗漏了一些东西,但我不太确定。如果有人对此有任何建议,我真的很感激。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.gregfmartin.smsdemo">
    <uses-sdk android:minSdkVersion="19"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.WRITE_SMS"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <application android:icon="@drawable/icon"
                 android:label="@string/app_name"
                 android:name=".ApplicationCore"
                 android:theme="@style/SmsDemo">
        <!-- Listens for incoming SMS Messages -->
        <receiver android:name=".components.receivers.SmsReceiver"
                  android:permission="android.permission.BROADCAST_SMS">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_DELIVER"/>
            </intent-filter>
        </receiver>

        <!-- Listens for incoming MMS Messages -->
        <receiver android:name=".components.receivers.MmsReceiver"
                  android:permission="android.permission.BROADCAST_WAP_PUSH">
            <intent-filter>
                <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER"/>
                <data android:mimeType="application/vnd.wap.mms-message"/>
            </intent-filter>
        </receiver>

        <!-- Activity -->
        <activity android:name=".Main">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".components.activities.ConversationThreadViewer">
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <action android:name="android.intent.action.SENDTO"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="sms"/>
                <data android:scheme="smsto"/>
                <data android:scheme="mms"/>
                <data android:scheme="mmsto"/>
            </intent-filter>
        </activity>

        <!-- Headless SMS Handler -->
        <service android:name=".components.services.HeadlessSmsSenderService"
                 android:permission="android.permission.SEND_RESPONSE_VIA_MESSAGE"
                 android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.RESPOND_VIA_MESSAGE"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="sms"/>
                <data android:scheme="smsto"/>
                <data android:scheme="mms"/>
                <data android:scheme="mmsto"/>
            </intent-filter>
        </service>
    </application>
</manifest>

2 个答案:

答案 0 :(得分:0)

您需要添加类别

android.intent.category.APP_MESSAGING

参考http://developer.android.com/reference/android/content/Intent.html#CATEGORY_APP_MESSAGING

答案 1 :(得分:0)

我终于弄清楚发生了什么。我知道在我弄明白并且面对大约十分钟后,我踢了自己。

服务,HeadlessSmsSenderService,权限应该是android.permission.SEND_RESPOND_VIA_MESSAGE而不是android.permission.SEND_RESPONSE_VIA_MESSAGE。

回应/响应

真的?发送回复?

抓住它的原因是我复制并粘贴了Google博文的清单,并且刚刚制作了一个新的应用程序非常快,使用它并且很低,它出现在系统对话框中。所以我对它进行了差异化处理,我的清单和所有内容都匹配起来,除了那个拼写错误(以及我所拥有的组织变化)。

关于这一点的令人讨厌的部分是,当您键入它们时,IntelliJ会自动捕获一些权限和意图操作。我也不确定Lint是否会捕获这些类型的语义错误。对于所有意图和目的,应用程序将编译并运行干净。在logcat上没有找到输出,所以这真是一个几乎完全无声的问题。

感谢您的所有帮助!