当前位置: 首页 > 面试题库 >

Android-如何以编程方式使我的应用程序默认为短信应用程序

况繁
2023-03-14
问题内容

我正在开发一个短信阻止应用程序。直到果冻豆都可以正常工作。从奇特卡特(Kitkat)到棉花糖,它不起作用。我在Google上进行了搜索,每个人都建议使用征得用户的许可,以使其成为该手机的默认短信应用。

   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>

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

现在我也想在此列表中显示我的应用程序,因此用户可以从此列表中选择我的应用程序,它将是该手机的默认短信应用程序。我怎样才能做到这一点。请以example /
code-sample答复。谢谢。


问题答案:

我跟着

不按照您问题中的代码。让我们回顾一下博客文章中的四个要求:

在广播接收器中,包括用于SMS_DELIVER_ACTION(“
android.provider.Telephony.SMS_DELIVER”)的意图过滤器。广播接收器还必须要求BROADCAST_SMS权限。

您以的形式拥有此商品PhoneStateReceiver

在广播接收器中,包括MIME类型为“ application / vnd.wap.mms-
message”的WAP_PUSH_DELIVER_ACTION(“
android.provider.Telephony.WAP_PUSH_DELIVER”)的意图过滤器。广播接收器还必须要求BROADCAST_WAP_PUSH权限。

您没有这个。

在传递新消息的活动中,包括具有模式,sms:,smsto:,mms:和mmsto:的ACTION_SENDTO(“
android.intent.action.SENDTO”)意图过滤器。

您有,形式为DashboardActivity

在服务中,包括具有Schema,sms:,smsto:,mms:和mmsto:的ACTION_RESPONSE_VIA_MESSAGE(“
android.intent.action.RESPOND_VIA_MESSAGE”)的意图过滤器。此服务还必须需要SEND_RESPOND_VIA_MESSAGE权限。

您有,形式为HeadlessSmsSendService

因此,按照说明添加<receiver>for WAP_PUSH_DELIVER_ACTION,看看是否有帮助。



 类似资料:
  • 我想知道我是否可以用非默认短信应用程序发送短信。

  • 问题内容: 我想使用来测试崩溃报告,但第一步是我需要使用代码在Android中模拟致命崩溃。 任何想法? 问题答案: 更新:也可以尝试这种创建方法, 并将其称为某处/ buttonClick 或直接抛出未捕获的异常 答对了!

  • 我有一个具有设备管理权限的应用程序。我的应用程序监控收到的短信,并通过一些逻辑传递内容。我可以改变默认的短信应用程序到我的应用程序编程。我的应用程序检查垃圾短信,所以它需要读/写/更新短信数据库。我想要一个Kitkat的修复方案。 我只是注意到,我的应用程序上的传入短信通知不再是新收到的短信通知,而是“新的挂出消息”通知,这是由挂出收到传入短信引起的。所以我的应用程序也不能接收带有sms_rece

  • 如果我们使用此代码,我们会看到一条消息:搜索GPS。然而,仅示出了GPS符号;GPS实际上不起作用: 为什么没用?以及如何使其正确工作?

  • 代码本身非常简单,但我无法访问Telephony.sms.getDefaultsMpackage,因为它说电话不能解析,而且我找不到任何可以解决这个问题的导入或声明。 有人能帮忙吗?

  • 本文向大家介绍如何以编程方式“重启” iOS应用程序?,包括了如何以编程方式“重启” iOS应用程序?的使用技巧和注意事项,需要的朋友参考一下 无论如何,您都无法重启iOS应用程序,即使您能够使用某些私有api,您的应用程序也将被Apple拒绝,并且不会被视为App Store版本。