-2

我正在開發一個短信應用程序。現在我的應用程序是手機上的默認短信應用程序。這意味着我的應用首先收到傳入的短信。現在,我想通過編程將應用程序的傳入短信發送到其他應用程序(內置短信應用程序)。Android - 廣播SMS意圖到其他(Biult-in短信應用程序)在Android的應用程序

注意:我不想更改默認的短信應用程序。

我的代碼從我的應用程序發送廣播到內置的短信應用 -

context.sendBroadcast(intent.setClassName(builtInSmsPackage, "com.android.mms.transaction.SmsReceiverService") 
.setPackage(builtInSmsPackage) 
.setAction("android.provider.Telephony.SMS_RECEIVED")); 

但內置的短信應用不能接受,我是從我的應用程序發送短信意圖。

+1

你不需要。系統負責發送'SMS_RECEIVED'廣播給所有聽它的應用程序。你的默認應用程序不需要做任何事情發生。但請注意,如果專用SMS應用程序不是默認應用程序,則預計會禁用其大部分功能,因此當您的應用程序爲默認應用程序時,它們可能不會監聽該廣播。 –

+0

它的工作很好,直到果凍豆。但從kitkat它需要使我的應用程序默認的短信應用程序接收短信。然後只有我的應用程序可以收到短信。沒有其他人可以收到短信,而我的應用程序是默認的短信應用程序。我的廣播發送到默認的短信應用程序的代碼是 - context.sendBroadcast(intent.setClassName(builtInSmsPackage,「com.android.mms.transaction。SmsReceiverService「) //.setPackage(buildInSmsPackage) .setAction(」android.provider.Telephony.SMS_RECEIVED「)); –

+1

」但是從kitkat它需要使我的應用程序默認的短信應用程序接收短信。「 - 不,它是沒有,你的應用程序不一定是接收傳入短信的默認設置,只需註冊一個Receiver進行SMS_RECEIVED操作,並獲得'RECEIVE_SMS'權限。「沒有其他人可以接收短信,而我的應用程序是默認的短信應用程序「 - 是的,他們可以,但他們可能不會聽他們。」我的代碼發送廣播...「 - 這是行不通的,因爲你的應用程序不具備必要的權限來廣播接收器 –

回答

2

現在我的應用程序是在手機上的默認短信應用程序。這意味着我的應用首先收到傳入的短信。

SMS_RECEIVED廣播訂單由<intent-filters>上的優先級決定。 SMS_DELIVER只發送給一個接收者,即用戶選擇的默認短信應用程序的接收者。

我的代碼從我的應用程序發送廣播到內置的短信應用 -

首先,這是錯誤的Intent行動。如Mike M. points out,系統已經將SMS提供給所有SMS_RECEIVED廣播接收機。該廣播通常會被默認的SMS客戶端忽略(請參閱the blog post that you claim to have read)。默認短信應用程序獨有的廣播是SMS_DELIVERED

其次,您無權發送SMS_DELIVER廣播。這需要持有普通Android SDK應用程序無法擁有的BROADCAST_SMS權限,以防止惡意軟件作者執行您正在嘗試執行的操作。即使與SMS_RECEIVED,I have been recommending that apps ensure that the sender holds BROADCAST_SMS for three years,再次對抗惡意軟件。

第三,SmsReceiverServiceService。您無法將廣播發送到服務。該服務可能進程SMS_DELIVER廣播,但它不收到它。

現在我想進入短信發送意向到其他應用程序

即通過標準的Android SDK機制是不可能在Android 4.4或以上版本。在Android 4.4+上,SMS阻止功能是完整的SMS客戶端或操作系統的功能。這不是可以被其他應用程序添加的功能。

相關問題