2010-11-01 2 views
13

J'essaie d'enregistrer mon activité pour qu'elle puisse être utilisée par le sélecteur d'activité/sélecteur d'activité permettant à un utilisateur de choisir de sélectionner ou non mon application/activité pour terminer ce qu'il essaie de faire. Je veux offrir la possibilité à l'utilisateur de pouvoir sélectionner mon application quand il veut envoyer un message SMS et quand il veut passer un appel sortant, pour essayer d'y parvenir, j'ai ajouté les morceaux de code suivants au sein de mes tags d'activité dans mon manifeste:Android - Filtre d'intention?

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

Cependant, le chooser d'activité ne semble jamais et les applications natives sont utilisées sans fournir un choix à l'utilisateur. Quelqu'un peut-il voir où je vais mal?

EDIT:

J'ai compris que je dois ajouter

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

pour le message SMS, mais que dois-je utiliser pour l'appel sortant?

EDIT 2:

J'ai essayé ce qui suit pour l'appel sortant:

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

Mais encore une fois sans chance, cela a été bloqué de 1,6 sur?

Edit 3:

C'est ce qui se passe lorsque je clique sur Mobile Text:

alt text

donc je veux la même chose lorsque je clique sur appel mobile

Répondre

9

Je pense qu'il devrait vous aider

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

Testé sur Android 2.1

+1

Est-ce que quelqu'un a remarqué que cela ne fonctionne pas sur les téléphones HTC? J'ai ajouté le même filtre d'intention à mon activité, et cela fonctionne sur certains téléphones, mais sur le HTC Incredible mon activité n'est jamais présentée comme un choix pour compléter l'intention. –

3

En effet, les activités et les services ne peuvent pas prendre en charge leurs propres objectifs. Vous devez utiliser un BroadcastReceiver. Pour mettre en œuvre cela, procédez comme suit:

Étendre la classe BroadcastReceiver Android comme ceci:

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

} 

Ensuite, vous devez déclarer le récepteur dans votre manifeste comme ceci:

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

Seules les intentions déclarées le manifeste sera attrapé par votre récepteur, donc si vous voulez attraper plusieurs intentions lancées par le système ou d'autres programmes et que vous voulez faire exactement la même chose quand leurs intentions sont attrapées, spécifiez ces intentions ici dans le manifeste et passez le si/blocs d'ailleurs dans la méthode onReceive.

+1

Je ne pense pas que c'est la bonne façon pour moi de réaliser ce que je veux, je veux vous inscrire pour le départ et DIAL intentions envoyées par le système , J'ai l'ENVOYER celui fonctionnant comme ci-dessus quand je clique sur envoyer le texte la boîte de dialogue "action complète utilisant" qui est exactement ce que je veux, je dois juste pouvoir faire la même chose quand je clique sur contact d'appel. –

+2

Ah alors peut-être vous avez besoin de spécifier certaines permissions pour les intentions que vous voulez que votre programme soit autorisé à utiliser. Regardez http://developer.android.com/reference/android/Manifest.permission.html. Je crois que vous devez utiliser l'autorisation CALL_PHONE. – AndrewKS

+0

Oui, j'ai aussi là-dedans - Je ne comprends pas pourquoi ça ne marche pas du tout. –

1

Vous devez ajouter une priorité au filtre d'intention afin qu'Android le prenne en compte. Par exemple:

<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

cela a fonctionné pour moi

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