Android – Intent Filter?

Я пытаюсь зарегистрировать свою активность так, чтобы ее можно было использовать в Chooser / picker Activity, позволяя пользователю выбирать, выбирать ли мое приложение / Activity для завершения того, что они пытаются сделать.

Я хочу предоставить пользователю возможность выбрать мое приложение, когда они хотят отправить SMS-сообщение, и когда они захотят разместить исходящий звонок, чтобы попытаться это сделать, я добавил следующие фрагменты кода в теги активности В моем манифесте:

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

Однако выбор активности не появляется, а собственные приложения используются без выбора пользователя. Может ли кто-нибудь увидеть, где я ошибаюсь?

РЕДАКТИРОВАТЬ:

Я понял, что мне нужно добавить

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

Для SMS-сообщения, но что я использую для исходящего вызова?

EDIT 2:

Для исходящего звонка я попробовал следующее:

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

Но опять же, без везения, заблокировано ли это от 1.6?

Редактировать 3:

Это то, что происходит, когда я нажимаю Text Mobile:

Alt text

Так что я хочу то же самое, когда я нажимаю Call mobile

Solutions Collecting From Web of "Android – Intent Filter?"

Я думаю, это должно помочь вам

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

Протестировано на Android 2.1

Это связано с тем, что действия и услуги не могут самостоятельно захватывать свои намерения. Вам нужно использовать BroadcastReceiver . Чтобы реализовать это, выполните следующие действия:

Расширьте класс BroadcastReceiver Android так:

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

Затем вам нужно объявить получателя в своем манифесте следующим образом:

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

Ваши намерения, объявленные в манифесте, будут пойманы вашим Получателем, поэтому, если вы хотите поймать несколько намерений, брошенных системой или другими программами, и хотите сделать то же самое, когда их намерения пойманы, тогда укажите эти намерения здесь в манифесте и Пропустите блоки if / else в методе onReceive.

Это сработало для меня

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

Вам нужно добавить приоритет в фильтр намерений, чтобы Android учитывал его. Например:

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