質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

3回答

3593閲覧

AndroidのNotificationのステータスバーアイコンについて

t_306

総合スコア7

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/02/28 04:05

編集2017/03/31 14:22

###前提・実現したいこと
androidのステータスバーに表示するアイコンについての質問です。
API23以降ではNotificationの
.setSmallIcon(Icon icon)
と直接アイコンを指定できると公式には書いてあります。
そこでビットマップにテキストを書き込み、動的にアイコンに情報を
表示するようにしようとしています。
開発はAndroidStudioで行っておりますが、エミュレーターでは
問題なくアイコンが表示されますが、実機(Xperia Z5 Premium)
ではエラーが出ます。このソースでは簡略化してTSTと書き込んでいます。
どなたかエラーの原因がお分かりであればご教示願えませんでしょうか。

###発生している問題・エラーメッセージ

問題が発生したため[システムUI]を終了します

###該当のソースコード

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //適当なビットマップを用意 Bitmap bitmap = Bitmap.createBitmap(72, 72, Bitmap.Config.ARGB_8888); //TSTと書き込む Canvas canvas = new Canvas(bitmap); canvas.drawARGB(0, 0, 0, 0xFF); TextPaint textPaint = new TextPaint(); textPaint.setAntiAlias(true); textPaint.setColor(Color.BLACK); textPaint.setFakeBoldText(true); textPaint.setTextSize(24); canvas.drawText("TST", 0, 72, textPaint); Icon icon; icon = Icon.createWithBitmap(bitmap); // 動的に描画した画像からアイコンを作成 //  通知 Notification ntf = new Notification.Builder(this) .setContentTitle("test") .setContentText("testtesttest") .setSmallIcon(icon) // API23以降はIconも指定できるはず //.setSmallIcon(R.drawable.ic_stat_name) これは動きます .setLargeIcon(bitmap) .build(); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(1, ntf); } }

###試したこと
動的にIcon iconではなく従来の表示方法では適当に絵は出せます。
デバッガで動作を追ったところ最後の一行のnotifyでエラーが出ます。
公式を見ても.setSmallIcon(Icon icon)については特に注意事項も見当たらず手詰まりの状態です。

追記1 (3/31 23:16)
logcatのログを更新しました。実機はXperia C5 Ultra(android 6.0)を使いましたが現象は同じです。

03-31 23:14:51.791 7743-7743/? I/art: Late-enabling -Xcheck:jni 03-31 23:14:51.843 7743-7743/com.example.t_oot.sbtest I/ActivityThread: Switching default density from 480 to 360 03-31 23:14:51.854 7743-7743/com.example.t_oot.sbtest W/System: ClassLoader referenced unknown path: /data/app/com.example.t_oot.sbtest-1/lib/arm64 03-31 23:14:51.975 7743-7743/com.example.t_oot.sbtest W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 03-31 23:14:52.054 7743-7752/com.example.t_oot.sbtest I/System: FinalizerDaemon: finalize objects = 1 03-31 23:14:52.148 7743-7743/com.example.t_oot.sbtest I/[MALI][Gralloc]: [+]r_hnd(0x7fa76378e0), client(39), share_fd(37) 03-31 23:14:52.200 7743-7784/com.example.t_oot.sbtest E/GED: Failed to get GED Log Buf, err(0) 03-31 23:14:52.200 7743-7784/com.example.t_oot.sbtest I/OpenGLRenderer: Initialized EGL, version 1.4 03-31 23:14:52.205 7743-7784/com.example.t_oot.sbtest I/OpenGLRenderer: Get enable program binary service property (1) 03-31 23:14:52.205 7743-7784/com.example.t_oot.sbtest I/OpenGLRenderer: Initializing program atlas... 03-31 23:14:52.206 7743-7784/com.example.t_oot.sbtest I/OpenGLRenderer: Program binary detail: Binary length is 146348, program map length is 128. 03-31 23:14:52.207 7743-7784/com.example.t_oot.sbtest I/OpenGLRenderer: Succeeded to mmap program binaries. File descriptor is 44, and path is /dev/ashmem�. 03-31 23:14:52.207 7743-7784/com.example.t_oot.sbtest I/OpenGLRenderer: No need to use file discriptor anymore, close fd(44). 03-31 23:14:52.213 7743-7784/com.example.t_oot.sbtest W/libEGL: [ANDROID_RECORDABLE] format: 1 03-31 23:14:52.225 7743-7784/com.example.t_oot.sbtest I/PerfService: PerfServiceNative api init 03-31 23:14:52.235 7743-7784/com.example.t_oot.sbtest I/[MALI][Gralloc]: [+]r_hnd(0x7fb1c67c80), client(39), share_fd(46) 03-31 23:14:52.253 7743-7743/com.example.t_oot.sbtest I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@799da7c time:1133912660

追記2 (3/31 23:16)
Gradleの内容です。AndroidStudioで空のアプリを生成して内容はいじっていません。

apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.example.t_oot.sbtest" minSdkVersion 23 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' testCompile 'junit:junit:4.12' }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yona

2017/02/28 05:19

エラーログはありませんか?
t_306

2017/02/28 06:37

logcatを追記しました
guest

回答3

0

ベストアンサー

RemoteServiceExceptionもでていないようですし、
こちらSystemUI側の問題の可能性があるやもしれません。

気になったのでXperia Support Forum等覗いてみましたが、
SystemUI関係でアップデートもあったような話を見ました。
もしかしたら特定の国(カナダとか)だけかもしれませんが。。

いずれにせよsetSmallIcon(Icon icon)は機種で動きに違いが出る場合があるやもと思っています。
Xperia Z5Xperia C5 Ultraも6.0以下からの更新組かと思いますが、
気になったので一応同じように更新されたGalaxy S5で試した所、上記のコードは動きました。
しかし、Galaxy S5だとsetSmallIcon(Icon icon)で通知を更新すると別の問題で落ちます(これは一度通知をcancelする事で回避はできます)。
ただこの現象もエミュレータでは再現しません。

と言う事から
昔setSmallIcon(int id, int level)が特定端末だったかOSで動かなかった時と同じように
個人的にはまだsetSmallIcon(Icon icon)を使うのはちょっと怖いなという感想です。

回答ではありませんが参考になれば幸いです。

投稿2017/04/02 12:41

編集2017/04/02 13:10
uniko

総合スコア448

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_306

2017/04/02 12:59

情報及び検証ありがとうございます。 Galaxyで動くということはXperia依存のエラーの可能性があるということですね。 Z5については7.0アップデートがそろそろ来るはずですのでアップデートを待って再度挑戦してみたいと思います。
uniko

2017/04/02 13:08

あとはAndroid Open Source ProjectのIssueにもでてないのでフレームワークのバグではなく、やはり機種単位で起きてる気がします。 まぁ機種やOSだけでなくキャリア、国単位でも状況違うといつもながら面倒だと思います。。
guest

0

気になるログが吐かれてますね。
would have incorrectly overridden the package-private method
Android Developers > Develop > API Guides > Android ランタイム (ART) でアプリ動作を確認

投稿2017/02/28 07:24

abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_306

2017/02/28 07:47

リンク先を読みましたがandroid開発は初心者なのでよく理解できませんでした。
abs123

2017/02/28 08:28

gradleの設定周り追記してもらえると助かります。 sdkVersion、buildToolsVersion、あと、dependenciesですかね。
t_306

2017/03/04 11:29

家族が入院してしまったためしばらくペンディングさせて下さい。申し訳ありません。
t_306

2017/03/31 14:23

Gradleの内容を追記しました。
guest

0

canvasに何も描画せずにsetSmallIconをしてもダメですか?

・エラーログもコード用の記述方法に修正してください。
・動作端末の情報も追記してください。
・インスタントランがエラーを出しているようなのでインスタントランを無効化してください。

投稿2017/02/28 06:59

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_306

2017/02/28 07:42

canvas.drawTextをコメントアウトしてみましたがシステムUIのエラーは出ます。 ・エラーログをコード用にするのはこれでよいのでしょうか? ・動作端末はXperia C5 Ultra(android 6.0)です。 ・インスタントランを無効化しました。
yona

2017/02/28 09:15

透過処理が怪しいので、drawARGBも消してください。 また、最新のログに修正してください。
t_306

2017/03/04 11:30

家族が入院してしまったためしばらくペンディングさせて下さい。申し訳ありません。
t_306

2017/03/31 14:26

透過処理をコメントアウトしましたが現象は同じです。Bitmapの大きさを大きくしたり小さくしたりしましたがだめです。ログを最新にしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問