ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-01 01:04:53  阅读:219  来源: 互联网

标签:android java android-manifest broadcastreceiver smsmanager


我正在开发一个短信阻止应用程序.这对Jelly-Bean来说很好.它不是从Kitkat到Marshmallow.我搜索谷歌和每个人都建议取得用户的许可,使其成为这款手机的默认短信应用程序.

   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.谢谢.

解决方法:

I followed it

不是根据你问题中的代码.让我们回顾一下the blog post的四个要求:

In a broadcast receiver, include an intent filter for SMS_DELIVER_ACTION (“android.provider.Telephony.SMS_DELIVER”). The broadcast receiver must also require the BROADCAST_SMS permission.

你有这个,以PhoneStateReceiver的形式.

In a broadcast receiver, include an intent filter for WAP_PUSH_DELIVER_ACTION (“android.provider.Telephony.WAP_PUSH_DELIVER”) with the MIME type “application/vnd.wap.mms-message”. The broadcast receiver must also require the BROADCAST_WAP_PUSH permission.

你没有这个.

In your activity that delivers new messages, include an intent filter for ACTION_SENDTO (“android.intent.action.SENDTO”) with schemas, sms:, smsto:, mms:, and mmsto:.

你有这个,以DashboardActivity的形式.

In a service, include an intent filter for ACTION_RESPONSE_VIA_MESSAGE (“android.intent.action.RESPOND_VIA_MESSAGE”) with schemas, sms:, smsto:, mms:, and mmsto:. This service must also require the SEND_RESPOND_VIA_MESSAGE permission.

你有这个,以HeadlessSmsSendService的形式.

因此,添加<接收器>对于WAP_PUSH_DELIVER_ACTION,按照说明操作,看看是否有帮助.

标签:android,java,android-manifest,broadcastreceiver,smsmanager
来源: https://codeday.me/bug/20190930/1837209.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有