2014-12-04 1 views
0

Я хочу отправить локальные уведомления с помощью cordovaplugin, расширив CordovaPlugin на моем HelloWorldPlugin.java. Но, похоже, мой код для локальных уведомлений не работает. Если я положу этот кусок кода в автогенерируемую AndroidCordova, которая расширяет функцию CordovaActivity, она работает. Вот код нижеЛокальное уведомление с использованием CordovaPlugin в гибридном Android-приложении eclipse

public class HelloWorldPlugin extends CordovaPlugin { 

@Override 
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) 
     throws JSONException { 
    if (action.equals("sayHello")){ 
            Context context //Added: 

     Intent intent = new Intent(); 
     PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0); 
     Notification noti = new Notification.Builder(this) 
     .setTicker("Test Ticker Notification") 
     .setSmallIcon(R.drawable.icon) 
     .setContentTitle("Test Title Notification") 
     .setContentText("Test Content Notification") 
     .setContentIntent(pIntent).build(); 
     noti.flags=Notification.FLAG_AUTO_CANCEL; 
     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     notificationManager.notify(0, noti); 
     return true; 
    } 
    return false; 

Он возвращает 2 ошибки. Во-первых, он говорит: «Конструктор Notification.Builder (HelloWorldPlugin) не определен», и NOTIFICATION_SERVICE не может быть разрешено переменной. Также я добавил контекст контекста и использовал контекст на части после getActivity, я использовал это на моем другом плагине, который расширяет CordovaActivity. Мне нужна помощь, пожалуйста, им застрял здесь в течение 4 дней теперь ..

ответ

0
This is how i got your code working using notificationcompat 
Note: you will have to add android-support-v4.jar next to your java file and add following line in plugin.xml 

<source-file src="src/android/StreethawkLibrary.jar" target-dir="libs/"/> 

Java code: 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.content.Context; 
import android.support.v4.app.NotificationCompat; 
import android.content.pm.PackageInfo; 
import android.content.pm.PackageManager; 
import android.content.pm.PackageManager.NameNotFoundException; 

    if (action.equals("sayHello")){ 
     Context context = yourfunctionReturnsContexthere(); 
     if(context==null){ 
     Log.e(TAG,"context is null.. returning"); 
     } 
     Intent intent = new Intent(); 
     intent.setAction("com.streethawk.intent.action.gcm.STREETHAWK_ACCEPTED"); 
     PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent,  
      PendingIntent.FLAG_UPDATE_CURRENT); 
     NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
     builder.setTicker("Test Ticker Notification"); 
     builder.setContentTitle("Test Title Notification"); 
     builder.setContentText("Test Content Notification"); 
     builder.setContentIntent(pIntent).build(); 
     builder.setAutoCancel(true); 
     try { 
      PackageInfo packageInfo = 
      context.getPackageManager().getPackageInfo(context.getPackageName(), 0); 
      builder.setSmallIcon(packageInfo.applicationInfo.icon); 
     } catch (NameNotFoundException e) { 
      // should never happen 
      throw new RuntimeException("Could not get package name: " + e); 
     } 
     NotificationManager notificationManager = (NotificationManager) 
      context.getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(0, builder.build()); 
} 
+0

Благодарим вас за все ваши усилия. Извините, но я использую eclipse всего несколько дней, и я все еще новый для материала. Это расширение CordovaPlugin? Потому что мой босс требует (я 19y/o ott) меня использовать cordovaplugin .. Также, что я надел yourfunctionreturncontexthere(); .. пытается ваш код сейчас .. Большое спасибо .. – Ziddorino

+0

Да, это расширение CordovaPlugin. –

+0

Ваша функцияreturncontexthere является псевдофункцией для получения контекста из вашего приложения. Вы можете игнорировать эту функцию и просто использовать conte xt, как вы использовали раньше. –

0

Если у вас есть контекст из приложения, которое будет добавляться плагин ..

вы можете попробовать следующее ...

  1. Check для контекста! = NULL
  2. Заменить Извещение NotI = новый Notification.Builder (это) с уведомлением NotI = новый Notification.Builder (контекст)
  3. NotificationManager notificationManager = (NotificationManager) context.getSystemService (Context.NOTIFICA TION_SERVICE);

Надеется, что это помогает

+0

это мой текущий код, и это не возвращает ошибки, но в настоящее время также нет уведомления всякого раза, когда я нажимаю мою кнопку .. Извещение уведомлено = новый Notification.Builder (контекст) NotificationManager notificationManager = (NotificationManager) context.getSystemService (Context.NOTIFICATION_SERVICE); – Ziddorino

+0

Я сделал шаги 2 и 3. нет ошибки, уведомление не работает. – Ziddorino

+0

Также замените ... PendingIntent pIntent = PendingIntent.getActivity (контекст, 0, намерение, 0); с PendingIntent negativePendingIntent = PendingIntent.getBroadcast (контекст, 0, намерение, PendingIntent.FLAG_UPDATE_CURRENT); –