簡體   English   中英

Android - 如何以編程方式使我的應用程序默認短信應用程序

[英]Android - how to make my app default sms app programatically

我正在開發一個短信攔截應用程序。 這對 Jelly-Bean 來說效果很好。 從奇巧到棉花糖,它不起作用。 我在谷歌上搜索,每個人都建議征得用戶的許可,通過使用 .

   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_ACTION(“android.provider.Telephony.SMS_DELIVER”)包含一個意圖過濾器。 廣播接收器還必須需要 BROADCAST_SMS 權限。

你有這個,以你的PhoneStateReceiver的形式。

在廣播接收器中,為 WAP_PUSH_DELIVER_ACTION(“android.provider.Telephony.WAP_PUSH_DELIVER”)包含一個具有 MIME 類型“application/vnd.wap.mms-message”的意圖過濾器。 廣播接收器還必須需要 BROADCAST_WAP_PUSH 權限。

你沒有這個。

在您傳遞新消息的 Activity 中,為 ACTION_SENDTO(“android.intent.action.SENDTO”)包含一個帶有架構、sms:、smsto:、mms: 和 mmsto: 的意圖過濾器。

你有這個,以DashboardActivity的形式。

在服務中,包含 ACTION_RESPONSE_VIA_MESSAGE ("android.intent.action.RESPOND_VIA_MESSAGE") 的意圖過濾器,其中包含架構、sms:、smsto:、mms: 和 mmsto:。 此服務還必須需要 SEND_RESPOND_VIA_MESSAGE 權限。

你有這個,以HeadlessSmsSendService的形式。

因此,按照說明為WAP_PUSH_DELIVER_ACTION添加一個<receiver> ,看看是否有幫助。

在清單文件中使用以下代碼。 它應該可以完美運行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM