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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

926閲覧

アプリがすぐに落ちてしまいます。

Asuyu_chan

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/12/07 02:59

編集2021/12/07 03:49

前提・実現したいこと

Android studioにてアラームを自分で設定し、その時間に通知が来るというのを実装したいのですが、アプリを起動したところすぐにアプリが落ちてしまいます。

該当のソースコード

Java
ソースコード ↓
MainActivity

package com.example.notification;

import androidx.appcompat.app.AppCompatActivity;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Calendar;
import java.util.Locale;

import static java.lang.String.format;

public class MainActivity extends AppCompatActivity {

private AlarmManager am; private PendingIntent pending; private int requestCode = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button buttonStart = this.findViewById(R.id.button_start); buttonStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Calendar calendar; calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, Integer.parseInt(time)); Intent intent = new Intent(getApplicationContext(), AlarmNotification.class); intent.putExtra("RequestCode",requestCode); pending = PendingIntent.getBroadcast( getApplicationContext(),requestCode, intent, 0); // アラームをセットする am = (AlarmManager) getSystemService(ALARM_SERVICE); if (am != null) { am.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending); // トーストで設定されたことをを表示 Toast.makeText(getApplicationContext(), "alarm start", Toast.LENGTH_SHORT).show(); Log.d("debug", "start"); } } }); // アラームの取り消し Button buttonCancel = findViewById(R.id.button_cancel); buttonCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent indent = new Intent(getApplicationContext(), AlarmNotification.class); PendingIntent pending = PendingIntent.getBroadcast( getApplicationContext(), requestCode, indent, 0); // アラームを解除する AlarmManager am = (AlarmManager)MainActivity.this. getSystemService(ALARM_SERVICE); if (am != null) { am.cancel(pending); Toast.makeText(getApplicationContext(), "alarm cancel", Toast.LENGTH_SHORT).show(); Log.d("debug", "cancel"); } else{ Log.d("debug", "null"); } } }); } EditText settingsTime = findViewById(R.id.jikoku); String time = settingsTime.getText().toString(); }

AlarmNotification

package com.example.notification;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.media.RingtoneManager;
import android.net.Uri;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class AlarmNotification extends BroadcastReceiver{
@Override // データを受信した
public void onReceive(Context context, Intent intent) {

Log.d("AlarmBroadcastReceiver","onReceive() pid=" + android.os.Process.myPid()); int requestCode = intent.getIntExtra("RequestCode",0); PendingIntent pendingIntent = PendingIntent.getActivity(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT); String channelId = "default"; // app name String title = context.getString(R.string.app_name); long currentTime = System.currentTimeMillis(); SimpleDateFormat dataFormat = new SimpleDateFormat("HH:mm:ss", Locale.JAPAN); String cTime = dataFormat.format(currentTime); // メッセージ + 11:22:331 String message = "時間になりました。 "+cTime ; NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); // Notification Channel 設定 NotificationChannel channel = new NotificationChannel( channelId, title , NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription(message); channel.enableVibration(true); channel.canShowBadge(); channel.enableLights(true); channel.setLightColor(Color.BLUE); // the channel appears on the lockscreen channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); channel.setSound(defaultSoundUri, null); channel.setShowBadge(true); if(notificationManager != null){ notificationManager.createNotificationChannel(channel); Notification notification = new Notification.Builder(context, channelId) .setContentTitle(title) // android標準アイコンから .setSmallIcon(android.R.drawable.ic_lock_idle_alarm) .setContentText(message) .setAutoCancel(true) .setContentIntent(pendingIntent) .setWhen(System.currentTimeMillis()) .build(); // 通知 notificationManager.notify(R.string.app_name, notification); } }

}

試したこと

使われていないコードなどを確認してみましたが、わかりませんでした。

補足情報(FW/ツールのバージョンなど)

Nexus6P API28

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

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

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

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

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

jimbe

2021/12/07 03:55

コードのご提示にはマークダウン記法をご利用ください。 マークダウンにつきましてはヘルプをご参照ください。 また、アプリが落ちた時の logcat をご確認頂いて、例外が発生していればその(なるべく)全文をご提示ください。
hoshi-takanori

2021/12/07 06:52

たぶん MainActivity の最後の 2 行が、メソッドの外に書いてあるせいでしょうね…。
dodox86

2021/12/07 07:08

> 使われていないコードなどを確認してみましたが、わかりませんでした。 デバッグしましょうよ、、、わからないところが出るたび、質問する訳にいきませんよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問