2010-11-01 28 views
13

Tôi đang cố gắng đăng ký Hoạt động của mình để có thể sử dụng Trình chọn/chọn hoạt động cho phép người dùng chọn có hay không chọn ứng dụng/Hoạt động của tôi để hoàn thành những gì họ đang cố gắng thực hiện.Android - Bộ lọc ý định?

Tôi muốn cung cấp tùy chọn để người dùng có thể chọn ứng dụng của tôi khi họ muốn gửi tin nhắn SMS và khi họ muốn thực hiện cuộc gọi đi, để cố gắng đạt được điều này, tôi đã thêm các đoạn mã sau đây trong thẻ Hoạt động của tôi trong manifest của tôi:

<intent-filter> 
<action android:name="android.intent.action.SENDTO" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<data android:mimeType="text/plain" /> 
</intent-filter> 

<intent-filter> 
<action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
<category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

Tuy nhiên tính năng chọn Hoạt động không bao giờ xuất hiện và các ứng dụng bản địa được sử dụng mà không cung cấp một sự lựa chọn cho người dùng. Bất cứ ai có thể nhìn thấy nơi tôi đang đi sai?

EDIT:

tôi đã tìm ra tôi cần phải thêm

<data android:scheme="sms" /> 
<data android:scheme="smsto" /> 

cho tin nhắn SMS nhưng tôi phải làm gì sử dụng cho các cuộc gọi đi?

EDIT 2:

Tôi đã thử những điều sau đây cho các cuộc gọi đi:

<intent-filter> 
<action android:name="android.intent.action.VIEW" /> 
<action android:name="android.intent.action.DIAL" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<category android:name="android.intent.category.BROWSABLE" /> 
<data android:scheme="tel" /> 
</intent-filter> 

Nhưng một lần nữa không có may mắn, đã này bị chặn từ 1,6 trên?

Sửa 3:

Đây là những gì sẽ xảy ra khi tôi bấm Chữ Di Động:

alt text

Vì vậy, tôi muốn điều tương tự khi tôi bấm Gọi di động

Trả lời

9

Tôi nghĩ rằng nó sẽ giúp bạn

<intent-filter > 
    <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="tel" /> 
</intent-filter> 

Tested trên Android 2.1

+1

Có ai nhận thấy rằng điều này không hoạt động trên điện thoại HTC không? Tôi đã thêm cùng một bộ lọc ý định vào hoạt động của mình và nó hoạt động trên một số điện thoại, nhưng trên HTC Incredible hoạt động của tôi không bao giờ được trình bày như một sự lựa chọn để hoàn thành mục đích. –

3

Điều này là do các hoạt động và dịch vụ không thể tự đón lấy ý định bên ngoài. Bạn cần sử dụng BroadcastReceiver. Để thực hiện điều này, làm như sau:

Mở rộng lớp BroadcastReceiver Android như sau:

public class MyReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
     Context context = getApplicationContext(); 
    Intent sendIntent = new Intent(); 
    if (intent.getAction().equals(Intent.NEW_OUTGOING_CALL)) { 
    sendIntent.setClass(context, MyActivity.class); 
    context.startActivity(sendIntent); 
    } 
     else if (intent.getAction().equals(Intent.SOME_OTHER_INTENT) { 
      sendIntent.setClass(context, MyService.class); 
    context.startService(sendIntent); 
     } 
     // More else ifs for more intents you want to catch. 
} 

} 

Sau đó, bạn cần phải khai báo thu trong biểu hiện của bạn như thế này:

<receiver android:name="MyReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
     // more intents you want to catch here 
    </intent-filter> 
</receiver> 

Chỉ intents khai báo trong bản kê khai sẽ bị Bộ nhận của bạn bắt, vì vậy nếu bạn muốn nắm bắt một số ý định được hệ thống hoặc các chương trình khác ném và muốn làm điều tương tự khi ý định của chúng bị bắt thì hãy xác định những ý định đó trong tệp kê khai và bỏ qua nếu/khối khác trong phương thức onReceive.

+1

Tôi không nghĩ rằng đó là cách chính xác cho tôi để đạt được những gì tôi muốn, tôi muốn đăng ký tham gia gửi và DIAL intents gửi từ hệ thống , Tôi có một GỬI làm việc như trên khi tôi bấm vào gửi văn bản "Hoàn thành hành động bằng cách sử dụng" hộp thoại xuất hiện mà là chính xác những gì tôi muốn, tôi chỉ cần có thể làm tương tự cho khi tôi bấm vào liên lạc cuộc gọi. –

+2

Ah thì có thể bạn cần chỉ định một số quyền nhất định mà bạn muốn chương trình của mình được phép sử dụng. Xem http://developer.android.com/reference/android/Manifest.permission.html. Tôi tin rằng bạn cần sử dụng quyền CALL_PHONE. – AndrewKS

+0

Vâng, tôi cũng có điều đó - Không hiểu tại sao nó không hoạt động. –

1

Bạn cần thêm mức ưu tiên cho bộ lọc ý định để Android tính đến nó. Ví dụ:

<activity android:name="YourActivity"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 
2

này làm việc cho tôi

<activity 
     android:label="@string/app_name" 
     android:name=".TestIntentActivity" >    
     <intent-filter> 
     <action android:name="android.intent.action.CALL" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <action android:name="android.intent.action.CALL_PRIVILEGED" /> 
     <data android:scheme="tel" /> 
     </intent-filter> 
    </activity> 
Các vấn đề liên quan