Java 安卓-如何使我的应用程序默认短信应用程序编程

Java 安卓-如何使我的应用程序默认短信应用程序编程,java,android,broadcastreceiver,android-manifest,smsmanager,Java,Android,Broadcastreceiver,Android Manifest,Smsmanager,我正在开发一个短信拦截应用程序。这对果冻豆来说很好。从Kitkat到棉花糖都不起作用。我在谷歌上搜索了一下,每个人都建议获得用户的许可,让它成为这款手机的默认短信应用 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if(!Telephony.Sms.getDefaultSmsPackage(getApplicationContext()).equals(getApplication

我正在开发一个短信拦截应用程序。这对果冻豆来说很好。从Kitkat到棉花糖都不起作用。我在谷歌上搜索了一下,每个人都建议获得用户的许可,让它成为这款手机的默认短信应用

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                if(!Telephony.Sms.getDefaultSmsPackage(getApplicationContext()).equals(getApplicationContext().getPackageName())) {
                    Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                    intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,
                            getApplicationContext().getPackageName());
                    startActivity(intent);
                }
            }
清单文件:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme.NoActionBar">
    <activity android:name=".RegisterActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".DashboardActivity">
        <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>
    <activity android:name=".LoginActivity" />
    <activity android:name=".ContactListActivity" />
    <activity android:name=".CallLogListActivity" />
    <activity android:name=".SMSContactListActivity" />
    <activity android:name=".SettingsActivity" />

    <receiver
        android:name=".PhoneStateReceiver"
        android:enabled="true"
        android:permission="android.permission.BROADCAST_SMS">
        <intent-filter android:priority="9999">
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="android.provider.Telephony.SMS_DELIVER" />
            <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
        </intent-filter>
    </receiver>

    <!-- Service that delivers messages from the phone "quick response" -->
    <service
        android:name=".HeadlessSmsSendService"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
        <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>

    <activity android:name=".BlockedCallLogActivity" />
    <activity android:name=".BlockedSmsLogActivity" />
    <activity android:name=".AboutUsActivity" />
</application>

我使用了这个代码示例。它显示一个与手机短信应用程序的对话框。我的应用程序未显示在此列表中

现在我想在此列表中显示我的应用程序,这样用户就可以从该列表中选择我的应用程序,它将成为该手机的默认短信应用程序。我该怎么做呢。请回复示例/代码示例。谢谢

我跟着它走

不是根据你问题中的代码。让我们从以下方面回顾一下四个需求:

在广播接收器中,包括一个SMS_DELIVER_操作的意图过滤器(“android.provider.Telephony.SMS_DELIVER”)。广播接收器还必须获得广播\u SMS许可

您可以使用
PhoneStateReceiver
的形式使用它

在广播接收器中,包括一个用于WAP_PUSH_DELIVER_动作的意图过滤器(“android.provider.Telephony.WAP_PUSH_DELIVER”),MIME类型为“application/vnd.WAP.mms message”。广播接收器还必须需要广播WAP PUSH权限

你没有这个

在传递新消息的活动中,包括一个针对ACTION_SENDTO(“android.intent.ACTION.SENDTO”)的意向过滤器,其中包含模式、sms:、smsto:、mms:、mmsto:

您可以通过
仪表板活动
的形式实现此功能

在服务中,包括一个意图过滤器,用于通过消息(“android.intent.ACTION.RESPOND\u VIA\u MESSAGE”)对动作\响应\以及模式、sms:、smsto:、mms:、和mmsto:。此服务还必须具有通过消息发送\响应\的权限

您可以使用
headlessmssendservice
的形式


因此,请按照说明为
WAP\u PUSH\u DELIVER\u操作添加
,看看这是否有帮助。

在清单文件中使用以下代码。它应该工作得很好



我遵循了它,但没有工作。“我的应用程序”未显示在“列表”对话框中。然后发布您的整个清单。引用我链接到的博客文章,“为了让你的应用作为符合条件的默认短信应用出现在系统设置中,你的清单文件必须声明一些特定的功能”。到目前为止,你的问题中只显示了其中一个。我编辑了我的帖子。已发布完整清单文件。将活动、接收者和服务名称替换为您的名称
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".conversation.ConversationsActivity" />
    <!-- Activity that allows the user to send new SMS/MMS messages -->
    <activity
        android:name=".sendsms.SendSmsActivity"
        android:windowSoftInputMode="adjustPan">
        <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>
    <!-- BroadcastReceiver that listens for incoming SMS messages -->
    <receiver
        android:name=".receivesms.SmsReceiver"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.BROADCAST_SMS">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="android.provider.Telephony.SMS_DELIVER" />
        </intent-filter>
    </receiver>
    <!-- BroadcastReceiver that listens for incoming MMS messages -->
    <receiver
        android:name=".receivesms.MmsReceiver"
        android:enabled="true"
        android:exported="true"
        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>

    <!-- Service that delivers messages from the phone "quick response" -->
    <service
        android:name=".service.SmsSendService"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
        <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>