2017-10-19 115 views
0

我想用PCL AddData();中的方法幫助執行操作,但是我正在尋找一種方法將它附加到下面的通知AddAction的屬性上:在Xamarin(PCL)執行方法的通知上添加操作

.AddAction(Resource.Drawable.tick_notify, "Take", pIntent) 

,但我不知道如何,因爲參數需要一個PendingIntent連線出來,是否有從PCL加入AddData方法的一種方式? 執行某個操作?

EDITED

Service.cs

using System; 
using Android.App; 
using Android.Content; 
using Android.OS; 

namespace Diabetes.Droid 
{ 
    [Service] 
    public class Mservice : Service 
    { 
     //Receiver class 
     private AlarmReceiver mReceiver = new AlarmReceiver(); 
     /// <summary> 
     /// Raises the bind event. 
     /// </summary> 
     /// <param name="intent">Intent.</param> 
     public override IBinder OnBind(Intent intent) 
     { 
      return null; 
     } 



     /// <summary> 
     /// Called by the system when the service is first created. 
     /// </summary> 
     public override void OnCreate() 
     { 
      base.OnCreate(); 
      //IntentnFilter all actities to receive information 
      IntentFilter iF = new IntentFilter(); 
      iF.AddAction("com.android.music.metachanged"); 
      iF.AddAction("com.android.music.playstatechanged"); 
      iF.AddAction("com.android.music.playbackcomplete"); 
      iF.AddAction("com.android.music.queuechanged"); 
      iF.AddAction("com.htc.music.metachanged"); 
      iF.AddAction("fm.last.android.metachanged"); 
      iF.AddAction("com.sec.android.app.music.metachanged"); 
      iF.AddAction("com.nullsoft.winamp.metachanged"); 
      iF.AddAction("com.amazon.mp3.metachanged"); 
      iF.AddAction("com.miui.player.metachanged"); 
      iF.AddAction("com.real.IMP.metachanged"); 
      iF.AddAction("com.sonyericsson.music.metachanged"); 
      iF.AddAction("com.rdio.android.metachanged"); 
      iF.AddAction("com.samsung.sec.android.MusicPlayer.metachanged"); 
      iF.AddAction("com.andrew.apollo.metachanged"); 
      //register receiver with intentnfilter 
      RegisterReceiver(mReceiver, iF); 
     } 
     public override void OnDestroy() 
     { 
      base.OnDestroy(); 
     } 
    } 
} 

回答

1

沒有沒有辦法來直接方法鏈接到通知操作。

當然是因爲通知是在系統手機界面上運行的,而不是你的應用程序代碼。

你應該建立一個掛起的意圖,並使用接收器來接收回調。

這個限制在Xamarin中以相同的方式存在。

你可以找到谷歌樣本中爲例(在標準Android的Java代碼)UniversalMusicPlayer#MediaNotificationManager.java

創建你的意圖:建立你的通知時

mAddDataPendingIntent = PendingIntent.getBroadcast(mService, REQUEST_CODE, 
       new Intent(ACTION_ADD_DATA).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT); 

然後:

notificationBuilder.addAction(new NotificationCompat.Action(icon, label, mAddDataPendingIntent)); 

註冊您的播放:

IntentFilter filter = new IntentFilter(); 
       filter.addAction(ACTION_ADD_DATA); 
       mService.registerReceiver(this, filter); 

和接收操作:

@Override 
public void onReceive(Context context, Intent intent) { 
    final String action = intent.getAction(); 
    LogHelper.d(TAG, "Received intent with action " + action); 
    switch (action) { 
     case ACTION_ADD_DATA: 
      addData(); 
      break; 
    } 
} 
+0

根據你的代碼,我可以代替'mTransportControls.play();'和'AddData();'方法。 –

+0

我面對的另一個問題是Java,如果您提供了C#代碼 –

+0

是的,這是在哪裏調用您的方法。我已經更新了我的答案,以便與您的背景更相關。關於C#版本,抱歉,但我對xamarin的知識太弱,無法爲您提供完整的示例。 – smora

相關問題