问题描述
我制作了一个 android 短信应用程序,我在其中发送和接收短信,就像 android 消息应用程序那样.现在我已将目标设置为 4.4(Android KitKat 版本),但 Android KitKat 具有新的默认消息"应用程序设置,用户可以一次选择一个应用程序进行消息传递.我按照是正确的 - 问题是您必须实现所有所需的功能:
在广播接收器中,为
SMS_DELIVER_ACTION
(android.provider.Telephony.SMS_DELIVER
")包含一个意图过滤器.广播接收器还必须需要 BROADCAST_SMS 权限.这允许您的应用直接接收传入的 SMS 消息.在广播接收器中,为
WAP_PUSH_DELIVER_ACTION
(android.provider.Telephony.WAP_PUSH_DELIVER
")包含一个具有 MIME 类型"的意图过滤器应用程序/vnd.wap.mms-message
".广播接收器还必须需要 BROADCAST_WAP_PUSH 权限.这允许您的应用直接接收传入的彩信.在传递新消息的 Activity 中,为
ACTION_SENDTO
(android.intent.action.SENDTO
")包含一个带有架构的意图过滤器,sms:
、smsto:
、mms:
和mmsto:
.这允许您的应用接收来自想要传递消息的其他应用的意图.在服务中,为
ACTION_RESPONSE_VIA_MESSAGE
(android.intent.action.RESPOND_VIA_MESSAGE
")包含一个意图过滤器,带有模式,sms:
、smsto:
、mms:
和mmsto:
.此服务还必须需要SEND_RESPOND_VIA_MESSAGE
权限.
如果没有这四个选项,您的应用将不会出现在默认的 SMS 选择对话框中.
I made an android sms app in which I am sending and receiving sms as android messaging app does so. Now I have set my target to 4.4 (Android KitKat version) but Android KitKat has new "Default Messaging" app settings that user can select one app at a time for messaging. I followed the steps from this site to select option for my sms app as default app but in the settings my app never showed up in the popup of selecting default messaging app.
Below is my java code I have used from the guid
if( androidOS.contains("4.4") ){
if (! Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName) ) {
// App is not default.
// Show the "not currently set as the default SMS app" interface
builder = new AlertDialog.Builder(MyConversation.this);
builder.setMessage("Shoot The Messenger is not set as your default messaging app. Do you want to set it default?")
.setCancelable(false)
.setTitle("Alert!")
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@TargetApi(19)
public void onClick(DialogInterface dialog, int id) {
Intent intent =
new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,
getPackageName());
startActivity(intent);
}
});
builder.show();
}
}
Also I added below code in Manifest
file.
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-feature android:name="android.hardware.telephony.gsm"
android:required="false"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.WRITE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.NoTitle" >
<activity
android:name="coms3.shootmessenger.Mysplash"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
</intent-filter>
</activity>
<receiver android:name="coms3.shootmessenger.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
<!--
<intent-filter android:priority="2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
-->
</receiver>
<receiver android:name="com.example.bootreceiver.MyBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<receiver android:name="coms3.shootmessenger.MMSReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<receiver android:process=":remote" android:name="AlarmManagerBroadcastReceiver"></receiver>
<receiver android:process=":remote" android:name="AlarmForPartyMessage"></receiver>
<receiver android:process=":remote" android:name="AlarmManagerMail"></receiver>
<activity
android:name="coms3.shootmessenger.ActivityFirstList"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityBase"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.SearchTab"
android:configChanges="keyboardHidden|orientation"
>
</activity>
<activity
android:name="coms3.shootmessenger.ActivityMail"
android:windowSoftInputMode="adjustPan"
>
</activity>
<activity
android:name="coms3.shootmessenger.ActivityScheduldMail"
android:windowSoftInputMode="adjustPan"
android:screenOrientation="portrait"
>
</activity>
<activity
android:name="coms3.shootmessenger.MessageTab" >
</activity>
<activity
android:name="coms3.shootmessenger.SettingsTab"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.MyConversation"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityDelayedSending"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityScheduldMessage"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityStealthMode"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivitySms"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityBlackList"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityDeleteMessage"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityDeleteone"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity android:name="coms3.shootmessenger.ActivitySmsnew" >
<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" />
</intent-filter>
</activity>
<activity
android:name="coms3.shootmessenger.ActivityEventlist"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityScheduleList"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityCancelSchedule"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityCancelEvent"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityCancelMail"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.Activitytutorial"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityConversationtutorial"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.Aboutus"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<service android:name="coms3.shootmessenger.HeadlessSmsSendService"
android:permission="android.permission.SEND_RESPOND_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>
UPDATE:
Note: I am testing on Emulator...After following all steps I only see the default messaging app of Android not mine like in the image given below. Any type of help will be appreciated. Thanks in Advance.
The instructions you posted were correct - the issue is that you must implement all of the required capabilities:
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.This allows your app to directly receive incoming SMS messages.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.This allows your app to directly receive incoming MMS messages.In your activity that delivers new messages, include an intent filter for
ACTION_SENDTO
("android.intent.action.SENDTO
") with schemas,sms:
,smsto:
,mms:
, andmmsto:
.This allows your app to receive intents from other apps that want to deliver a message.In a service, include an intent filter for
ACTION_RESPONSE_VIA_MESSAGE
("android.intent.action.RESPOND_VIA_MESSAGE
") with schemas,sms:
,smsto:
,mms:
, andmmsto:
. This service must also require theSEND_RESPOND_VIA_MESSAGE
permission.
Without all four, your app will not be listed in the default SMS selection dialog.
这篇关于如何在 Android Kitkat 中设置我的短信应用默认设置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!