J'ai essayé pendant des jours pour que cela fonctionne, sans aucun succès. J'essaie de réagir sur un bouton matériel de mon ordinateur de poche via les fonctions de leur SDK spécifique (c'est un Panasonic Toughpad). Je génère ce code dans Xamarin et j'ai un échantillon du SDK en Java.Xamarin IntentService démarré par HardwareButton
Voici mon code:
tout d'abord le service lui-même. serviceClass:
[Service]
[IntentFilter(new[] { "com.panasonic.toughpad.android.api.appbutton.intent.APPBUTTON" })]
class ButtonIntentService : IntentService
{
public ButtonIntentService() :base("ButtonIntentHandlerThread"){ }
protected override void OnHandleIntent(Intent intent)
{
if (!intent.Action.Equals(AppButtonManager.ActionAppbutton))
{
return;
}
if (ButtonTestFragment.getInstance() !=null)
{
ButtonTestFragment.getInstance().updateButtonState(intent);
}
else
{
}
}
Voici le code snipped du AndroidManifest. AndroidManifest:
<service
android:enabled="true"
android:name="com.SoftwareTestXamarin.Droid.ButtonIntentService"
android:label="button api Sample"
android:exported="true">
<intent-filter>
<action android:name="com.panasonic.toughpad.android.api.appbutton.intent.APPBUTTON"/>
</intent-filter>
</service>
Je suis nouveau dans cette API choses connexion. Dans mes pensées, l'intention devrait maintenant entendre sur le HandheldButtons
via le filtre. Donc, lorsque je clique sur le AppButton
de mon ordinateur de poche, les fonctions IntentServices
doivent démarrer?!? Ou ai-je tort? Dans mon avis, ils font la même chose dans leur échantillon Java.
code:
serviceClass:
public class ButtonIntentService extends IntentService {
public ButtonIntentService() {
super("Button Intent Handler Thread");
}
@Override
protected void onHandleIntent(Intent intent) {
if (!intent.getAction().equals(AppButtonManager.ACTION_APPBUTTON)) {
// Ignore..
return;
}
if (ButtonTestFragment.getInstance() != null) {
ButtonTestFragment.getInstance().updateButtonState(intent);
}
}
AndroidManifest:
<service
android:name="com.panasonic.toughpad.android.sample.buttons.ButtonIntentService"
android:label="@string/lbl_button_service"
android:exported="true">
<intent-filter>
<action android:name="com.panasonic.toughpad.android.api.appbutton.intent.APPBUTTON"/>
</intent-filter>
</service>
---- ---- ACTUALISATION 04,08
Juste pour votre information . J'ai également essayé d'obtenir l'événement du APPBUTTON
avec un BroadcastReceiver
et le laisser commencer le IntentService
sans aucun succès. Voici le code ajouté Snippets:
[BroadcastReceiver]
[IntentFilter(new[] { "com.panasonic.toughpad.android.api.appbutton.intent.APPBUTTON" }, Priority = (int)IntentFilterPriority.HighPriority)]
class ButtonReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
var serviceIntent = new Intent(context, typeof(ButtonIntentService));
serviceIntent.PutExtras(intent);
context.StartService(serviceIntent);
}
}
Snippet de AndroidManifest:
<receiver android:name="ButtonReceiver">
<intent-filter>
<action android:name="com.panasonic.toughpad.android.api.appbutton.intent.APPBUTTON"/>
</intent-filter>
</receiver>
Quelques choses à vérifier car je ne le vois pas dans votre code: 1) Les autorisations appropriées sont-elles données dans votre application Xamarin par rapport à l'application exemple? (Pouvez-vous également créer un lien vers l'exemple d'application?) 2) Assurez-vous que cette intention personnalisée peut être diffusée puis reçue correctement. Utilisez 'SendBroadcast (Intent)' pour le tester localement dans votre activité. –