2017-09-18 14 views
1

私たちはゲームでプッシュ通知を使用して、ゲームがエンジンからの一時停止/中断コールを受け取ったときに、ゲーム内の特定のことをユーザーに通知します。NotificationManagerからのjava.lang.SecurityException?

私はGoogleデベロッパーコンソールからクラッシュログを探していましたが、その大部分はプッシュ通知を使用してSecurityExceptionが原因です。

コールスタック:

java.lang.RuntimeException: 

    at android.app.ActivityThread.handleReceiver (ActivityThread.java:2697) 
    at android.app.ActivityThread.access$1500 (ActivityThread.java:178) 
    at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1466) 
    at android.os.Handler.dispatchMessage (Handler.java:107) 
    at android.os.Looper.loop (Looper.java:194) 
    at android.app.ActivityThread.main (ActivityThread.java:5560) 
    at java.lang.reflect.Method.invokeNative (Native Method) 
    at java.lang.reflect.Method.invoke (Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:844) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:611) 
    at dalvik.system.NativeStart.main (Native Method) 

Caused by: java.lang.SecurityException: 
    at android.os.Parcel.readException (Parcel.java:1425) 
    at android.os.Parcel.readException (Parcel.java:1379) 
    at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag (INotificationManager.java:239) 
    at android.app.NotificationManager.notify (NotificationManager.java:132) 
    at android.app.NotificationManager.notify (NotificationManager.java:108) 
    at tinytitan.tinylib.NotificationPublisher.onReceive (NotificationPublisher.java:21) 
    at android.app.ActivityThread.handleReceiver (ActivityThread.java:2690) 

'tinytitan' 行は、プラグインNOTIF当社のJavaプッシュからのものであること。ソース・コード:

は、なぜ私たちは、この例外を取得し、どのようにそれを修正するされています。ここでは

package tinytitan.tinylib; 

import android.app.Notification; 
import android.app.NotificationManager; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class NotificationPublisher extends BroadcastReceiver { 

    public static String NOTIFICATION_ID = "notification-id"; 
    public static String NOTIFICATION = "notification"; 

    /** 
    * Called when the BroadcastReceiver is receiving an Intent 
    */ 
    public void onReceive(Context context, Intent intent) { 
     NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification notification = intent.getParcelableExtra(NOTIFICATION); 
     int id = intent.getIntExtra(NOTIFICATION_ID, 0); 
     notificationManager.notify(id, notification); // <-- LINE# 21 
    } 
} 

が出てマニフェストファイルです(私たちは別のプラグインを使用する複数の原因がありますか)?

EDITマニフェストファイルの内容を投稿しようとしましたが、書式設定はできませんでしたので、角括弧を取り除きました。

uses-permission android:name="android.permission.INTERNET" 
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" 
uses-permission android:name="com.android.vending.BILLING" 
uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" 
uses-permission android:name="android.permission.WAKE_LOCK" 
uses-permission android:name="android.permission.VIBRATE" 
uses-permission android:name="android.permission.GET_TASKS" 
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
uses-permission android:name="com.android.vending.CHECK_LICENSE" 
uses-permission android:name="android.permission.android.permission.READ_PHONE_STATE" 
uses-permission android:name="android.permission.ACCESS_WIFI_STATE" 

EDIT:プラグインのコードの残り:

/** 
* Shows a Notification with a delay 
*/ 
public static void scheduleNotification(int id, long delayMs, String title, String message, boolean vibrate, boolean lightBlink, boolean sound, String largeImage, String smallImage) 
{ 
    Notification notification = getNotification(title, message, vibrate, lightBlink, sound, smallImage, largeImage); 

    Intent notificationIntent = new Intent(UnityPlayer.currentActivity, NotificationPublisher.class); 
    notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, id); 
    notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(UnityPlayer.currentActivity, id, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    long futureInMillis = SystemClock.elapsedRealtime() + delayMs; 
    AlarmManager alarmManager = (AlarmManager)UnityPlayer.currentActivity.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); 
} 

/** 
* Cancels a notification waiting to be added to the notification query or removes a notification 
* from the notification query. 
*/ 
public static void cancelNotification(int id) 
{ 
    //Remove it from the alarm manager (if present) 
    AlarmManager am = (AlarmManager)UnityPlayer.currentActivity.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(UnityPlayer.currentActivity, NotificationPublisher.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(UnityPlayer.currentActivity, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    am.cancel(pendingIntent); 

    //remove it from the notification query (if present) 
    android.app.NotificationManager notificationManager = (android.app.NotificationManager)UnityPlayer.currentActivity.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.cancel(id); 
} 

/** 
* Removes all notifications that are in the notification query 
*/ 
public static void clearAll(){ 
    android.app.NotificationManager notificationManager = (android.app.NotificationManager)UnityPlayer.currentActivity.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.cancelAll(); 
} 

のC#からの呼び出し:

TinyAndroidServices.ScheduleNotification(id, delay, title, message, true, true, true, "app_icon", androidSmallIcon); 
+0

あなたのmainfest –

+0

の許可を@ Hala.M Doneで共有してください。私の編集を確認してください。 – vexe

+0

こんにちは、解決策を見つけましたか?私は同じクラッシュレポートを持っています – j2esu

答えて

0

あなたは

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

Nこの権限を使用する必要がありますこれは:

<uses-permission android:name="android.permission.android.permission.READ_PHONE_STATE" /> 
+0

返事をありがとう。私はすでにその許可を持っています。私は使用している権限を含めるように編集しました。 – vexe

+0

あなたの通知オブジェクトを表示する@vexe – shmakova

+0

申し訳ありませんが、私はあなたが '通知オブジェクト'を意味するかどうか分かりません。残りのプラグインコードを投稿しました。おそらくgetNotification関数の結果を意味するでしょうか? – vexe

関連する問題