JobSchedulerで通知を使用するとAndroidアプリがクラッシュする

誰か:

私は最近、アプリがテスト目的で閉じられている場合でも、5秒ごとに通知を表示するように試みているので、JobServiceを使用してそれを行います。


public class Job1 extends JobService {

    private boolean cancelled  = false;
    public static final String tag = "Job";
    private int id = 0;

    private void createChannel(String id, CharSequence name, int imp) {
           NotificationChannel channel = new NotificationChannel(id, name ,  imp );
           NotificationManager nm = getSystemService(NotificationManager.class);
           nm.createNotificationChannel(channel);      
    }

    private void display(int id , CharSequence channel_id, String content, String title , Context ctx){

        createChannel((String)channel_id , channel_id , NotificationManager.IMPORTANCE_HIGH);

        NotificationCompat.Builder nb = new NotificationCompat.Builder(ctx, (String) channel_id)
                .setSmallIcon(R.drawable.ic_work_black_24dp)
                .setContentText(content)
                .setContentTitle(title)
                .setPriority(NotificationCompat.PRIORITY_MAX);


        NotificationManagerCompat nmc = NotificationManagerCompat.from(ctx);
        nmc.notify(id , nb.build() );
      }

    @Override
    public boolean onStartJob(JobParameters params) {
        Log.i(tag, "Job has been started");
        Job(params);

        return true;
    }

    private void Job(JobParameters params){


        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    Log.i(tag, "Job is Running");
                   ///////////////////////////////////////////////////
                    //the crash begin here.

                    display(id++ , "channel1" , "Description" , "title" , this);
                    ////////////////////////////////////////////////////////////////

                    try {

                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }

        }).start();

        //jobFinished(params , true);
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.i(tag, "Job has been cancelled");
        cancelled = true;
        return true;
    }
}

ジョブを呼び出すコード:

ComponentName cname = new ComponentName(this, Job1.class);
            JobInfo jinfo = new JobInfo.Builder(1, cname)
                    .setRequiresCharging(false)
                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                    .setPersisted(true)
                    .build();

            JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
            int result = scheduler.schedule(jinfo);
            if (result == JobScheduler.RESULT_SUCCESS) {
                Log.i("job", "scheduled");
            } else {
                Log.i("job", "failed");
            }

そしてもちろん、AndroidManifest.xmlに権限を持つサービス名も追加しました

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

 <service android:name=".Job1"
            android:permission="android.permission.BIND_JOB_SERVICE" />

通知機能だけを使用しようとすると、たとえばボタンだけでそれを使用して完全にdisplay機能しJob、仕事で関数を呼び出す行を削除すると、通知を使用するとアプリ全体がクラッシュしますでは、何が問題になるのでしょうか?

誰か:

logcatを見て注意深く読んだ後、私はようやく解決策を得ました

主な問題は、その中のスレッド自体にありましJobServiceた。新しい通知を作成しようとすると、この情報でアプリがクラッシュします。

java.lang.RuntimeException: Can't create handler inside thread Thread[Thread-2,5,main] that has not called Looper.prepare()

解決策は、新しいスレッドクラスを作成して呼び出すことです Looper.prepare()

新しいスレッドコードはこのクラスになります:

public class TestThread extends Thread{

    private int id = 0;

    private Context ctx;

    public TestThread(Context ctx){
        this.ctx = ctx;
    }

    public void run(){

        //this line has solved the issue
        Looper.prepare();

        while(true){

            Log.i("Thread" , "Thread is currently running in background :)");

            // my notifciation class
            (new Notifications()).displayNot(id++ , "channel6", "Content" , "title" , ctx);

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

そして今、私たちは仕事からこのクラスを使用しています、私の場合はJob関数

private void Job(JobParameters params){

        Thread thread = new TestThread(this);
        thread.start();

        if(!thread.isAlive()){
            jobFinished(params , true);
        }

    }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

cordova-1つのプッシュ通知を受信するとAndroidアプリがクラッシュする

分類Dev

SharedPreferences.contains()を使用するとAndroidアプリがクラッシュする

分類Dev

Firebase Android:招待状を追加した後に通知を受信するとアプリがクラッシュする

分類Dev

OneSignalプッシュ通知が送信されるとAndroidアプリがクラッシュする

分類Dev

プッシュ通知が来るとAndroidアプリがクラッシュする

分類Dev

SwiftでCGImageSourceCreateThumbnailAtIndexを使用するとアプリがクラッシュする

分類Dev

GoogleMapsを使用すると、FragmentManagerReplaceでアプリがクラッシュする

分類Dev

Android 5.0でRecyclerViewを使用しようとするとアプリがクラッシュする

分類Dev

android.hardware.Camera.Open()を使用するとアプリがクラッシュするのはなぜですか?

分類Dev

「Facebookで続行」を押すとAndroidアプリがクラッシュする

分類Dev

Androidでgridviewを使用しているときにアプリケーションがクラッシュする

分類Dev

Android Firebaseプッシュ通知をクリックすると、アプリが再起動します

分類Dev

流星でセッションを使用するとアプリケーションがクラッシュする

分類Dev

findViewWithTagとgetTagを使用するとアプリがクラッシュする

分類Dev

インテントとgetメソッドを使用するとAndroidアプリがクラッシュする

分類Dev

FirebaseCrashlyticsを追加するとAndroidアプリがクラッシュする

分類Dev

Android-JsonFactoryを作成するとアプリがクラッシュする

分類Dev

IMEI番号を取得するとAndroidアプリがクラッシュする

分類Dev

android-写真を保存するとアプリがクラッシュする

分類Dev

ボタンを追加するとアプリがクラッシュする-Android

分類Dev

AndroidでClassNotFoundExceptionを使用して初めて開くと、Flutterアプリがクラッシュする

分類Dev

通知を読み込もうとするとアプリがクラッシュする

分類Dev

Angularjsと解析アプリで$ qを使用するとクラッシュする

分類Dev

UITextViewでリンクを押すとアプリがクラッシュする

分類Dev

TransitionDrawableを使用するとアプリがクラッシュする

分類Dev

Chrome DevToolsを使用すると、Cordovaアプリがクラッシュする

分類Dev

QWidgets.QMessageBoxを使用するとアプリがクラッシュする

分類Dev

addView()を使用するとアプリがクラッシュする

分類Dev

AsyncTaskを使用するとアプリがクラッシュする

Related 関連記事

  1. 1

    cordova-1つのプッシュ通知を受信するとAndroidアプリがクラッシュする

  2. 2

    SharedPreferences.contains()を使用するとAndroidアプリがクラッシュする

  3. 3

    Firebase Android:招待状を追加した後に通知を受信するとアプリがクラッシュする

  4. 4

    OneSignalプッシュ通知が送信されるとAndroidアプリがクラッシュする

  5. 5

    プッシュ通知が来るとAndroidアプリがクラッシュする

  6. 6

    SwiftでCGImageSourceCreateThumbnailAtIndexを使用するとアプリがクラッシュする

  7. 7

    GoogleMapsを使用すると、FragmentManagerReplaceでアプリがクラッシュする

  8. 8

    Android 5.0でRecyclerViewを使用しようとするとアプリがクラッシュする

  9. 9

    android.hardware.Camera.Open()を使用するとアプリがクラッシュするのはなぜですか?

  10. 10

    「Facebookで続行」を押すとAndroidアプリがクラッシュする

  11. 11

    Androidでgridviewを使用しているときにアプリケーションがクラッシュする

  12. 12

    Android Firebaseプッシュ通知をクリックすると、アプリが再起動します

  13. 13

    流星でセッションを使用するとアプリケーションがクラッシュする

  14. 14

    findViewWithTagとgetTagを使用するとアプリがクラッシュする

  15. 15

    インテントとgetメソッドを使用するとAndroidアプリがクラッシュする

  16. 16

    FirebaseCrashlyticsを追加するとAndroidアプリがクラッシュする

  17. 17

    Android-JsonFactoryを作成するとアプリがクラッシュする

  18. 18

    IMEI番号を取得するとAndroidアプリがクラッシュする

  19. 19

    android-写真を保存するとアプリがクラッシュする

  20. 20

    ボタンを追加するとアプリがクラッシュする-Android

  21. 21

    AndroidでClassNotFoundExceptionを使用して初めて開くと、Flutterアプリがクラッシュする

  22. 22

    通知を読み込もうとするとアプリがクラッシュする

  23. 23

    Angularjsと解析アプリで$ qを使用するとクラッシュする

  24. 24

    UITextViewでリンクを押すとアプリがクラッシュする

  25. 25

    TransitionDrawableを使用するとアプリがクラッシュする

  26. 26

    Chrome DevToolsを使用すると、Cordovaアプリがクラッシュする

  27. 27

    QWidgets.QMessageBoxを使用するとアプリがクラッシュする

  28. 28

    addView()を使用するとアプリがクラッシュする

  29. 29

    AsyncTaskを使用するとアプリがクラッシュする

ホットタグ

アーカイブ