2013-06-30 37 views
5

Tôi có một ứng dụng cho phép người dùng chuyển tiếp tin nhắn SMS khi họ nhận được. Quay lại trong ngày, tôi có số android:priority trong số intent-filter cho android.provider.Telephony.SMS_RECEIVED được đặt ở vị trí cao hơn ứng dụng nhắn tin mặc định của Android. Tôi đã làm như vậy, để người dùng có thể chuyển tiếp tin nhắn mà không phải xóa chúng trong ứng dụng nhắn tin. Tuy nhiên, một vài tháng sau đó, Go SMS Pro đã phát hành bản cập nhật ứng dụng của họ với giá trị android:priority rất cao, do đó người dùng đã cài đặt ứng dụng đó đã bắt đầu gặp sự cố. Tôi đã cập nhật ứng dụng của mình để ưu tiên của tôi cao hơn một chút so với Go SMS Pro và mọi thứ đều ổn. Bây giờ Go SMS Pro đã làm nó một lần nữa, android:priority của họ đã được đưa đến giá trị tối đa bạn có thể gán. 2147483647 trên một trong những máy thu phát sóng của họ và 2147483640 trên một máy khác (có, Go SMS Pro hiện có hai máy thu phát sóng).Go SMS Pro ghi đè android.provider.Telephony.SMS_RECEIVED

Để khắc phục điều này, tôi đã cố gắng thay đổi mức độ ưu tiên của mình thành tối đa giống như của họ, nhưng bằng cách nào đó ứng dụng của họ tiếp tục chiến đấu với SMS mặc dù các ưu tiên của chúng tôi giống nhau. Tôi đọc ở đâu đó rằng Android khi phải quyết định giữa hai ứng dụng có cùng mức độ ưu tiên, nó sẽ chọn một ứng dụng được cài đặt sớm nhất. Tôi đã thử cài đặt Go SMS Pro SAU KHI ứng dụng của tôi, nhưng vẫn không có gì.

Cách thích hợp để khắc phục sự cố này là gì? Họ đang làm gì trong ứng dụng của họ khiến họ phát sóng SMS trước bất kỳ ai khác, ngay cả với cùng giá trị android:priority?

+1

chúng tôi cũng là loại khó chịu bởi GoSMS, chúng tôi thường là một sk của chúng tôi (mobitexter.net) người dùng thực hiện các thao tác sau: 1. Khởi chạy ứng dụng GoSMS trên Điện thoại di động Android của bạn. 2. Trong 'Trình đơn -> Cài đặt -> Cài đặt nhận' - Bỏ chọn hộp có nội dung 'Tắt thông báo tin nhắn khác'. –

Trả lời

4

Cách thích hợp để khắc phục sự cố này là gì?

Sửa đổi ứng dụng của bạn để tồn tại được chạy sau khi Go SMS Pro hoặc bất kỳ ứng dụng nào khác. Bạn cũng có thể tư vấn cho người dùng nếu bạn phát hiện các ứng dụng theo dõi cùng một chương trình phát sóng có mức độ ưu tiên bằng hoặc cao hơn (sử dụng PackageManager cho điều này), để họ biết cách định cấu hình các ứng dụng đó cho phù hợp.

Cố gắng có mức độ ưu tiên cao hơn mọi người khác là cuộc đua vũ trang, một trong số đó cuối cùng bạn sẽ kết thúc bằng một ưu tiên tương tự. Hành vi của các chương trình phát sóng theo thứ tự với các ưu tiên gắn liền là không có giấy tờ, và do đó không có hành vi được bảo đảm. Android - hoặc các phiên bản tùy chỉnh của Android - được hoan nghênh để sửa đổi thuật toán ngắt kết nối. thuật toán đó có thể là bất cứ điều gì từ:

  • thứ tự chữ cái theo tên gói

  • thứ tự như tìm thấy trong một bộ sưu tập băm, nơi phím băm có thể dựa vào bất cứ điều gì (ví dụ, đối tượng ID)

  • số ngẫu nhiên phát

vì bạn có thể không đáng tin cậy "giành chiến thắng", sửa đổi ứng dụng của bạn được thành công càng tốt khi bạn làm ind eed "mất".

+0

Tôi cho rằng bạn đã đúng. Tôi vừa kết thúc tối đa mức độ ưu tiên trên tệp kê khai của mình và khi họ khởi chạy ứng dụng, tôi sử dụng PackageManager để tìm bất kỳ ứng dụng nào có mức độ ưu tiên bằng nhau (hoặc cao hơn mặc dù nó đã tối đa) và hiển thị cho họ hộp thoại có danh sách ứng dụng và đề xuất gỡ cài đặt chúng. Đó là tất cả những gì có thể được thực hiện ngay bây giờ tôi đoán. Cảm ơn. – AxiomaticNexus

2

GO SMS Pro đã đặt ra những dòng này trong đó là biểu hiện cho SmsReceiver:

<receiver android:name=".smspopup.SmsReceiver"  android:permission="android.permission.BROADCAST_SMS"> 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.provider.Telephony.GSM_SMS_RECEIVED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" /> 
      <data android:mimeType="application/vnd.wap.mms-message" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="com.android.mms.transaction.MESSAGE_SENT" /> 
     </intent-filter> 
    </receiver> 

tất cả những ý-bộ lọc làm ưu tiên hàng đầu của nó cao hơn so với máy thu của bạn ngay cả khi máy thu của bạn có ưu tiên thiết lập để 2147483647. bạn có thể nhìn thấy danh sách của tất cả các máy thu của tất cả các ứng dụng bằng cách:

List<ResolveInfo> receivers = getPackageManager().queryBroadcastReceivers(new Intent("android.provider.Telephony.SMS_RECEIVED"), 0); 

người nhận đầu tiên trong danh sách, nhận được sms trước hơn những người khác