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

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

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

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

Q&A

解決済

1回答

2484閲覧

Androidのアラームアプリがうまく動かない

sun-solar-arrow

総合スコア113

Android

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

0グッド

0クリップ

投稿2016/04/09 23:25

編集2016/04/10 01:41

このアプリは通知を時間になったら通知をするアプリですが、
時間になると強制終了します。(問題が発生したため…と出る)
ログは以下の通りです。

Caused by: java.lang.ClassCastException: android.location.LocationManager cannot be cast to android.app.NotificationManager at com.mycompany.myclock.Alarm.onReceive(Alarm.java:11) at android.app.ActivityThread.handleReceiver(ActivityThread.java:2586) at android.app.ActivityThread.access$1700(ActivityThread.java:139)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:149)  at android.app.ActivityThread.main(ActivityThread.java:5257)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)  at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)  at de.robv.android.xposed.XposedBridge.main(Native Method)  at dalvik.system.NativeStart.main(Native Method) 

Java

1import android.content.*; 2import android.app.*; 3public class Alarm extends BroadcastReceiver 4{ 5 6 @Override 7 public void onReceive(Context context, Intent receive){ 8 int Notificationid=receive.getIntExtra("notification",0); 9 NotificationManager notification=(NotificationManager) context.getSystemService(Context.LOCATION_SERVICE); 10 Intent boot=new Intent(context,MainActivity.class); 11 12 PendingIntent contentintent=PendingIntent.getActivity(context,0,boot,0); 13 14 Notification.Builder builder=new Notification.Builder(context); 15 16 builder.setSmallIcon(android.R.drawable.ic_dialog_alert) 17 .setContentTitle("時間になりました") 18 .setContentText(receive.getCharSequenceExtra("TODO")) 19 .setWhen(System.currentTimeMillis()) 20 .setPriority(Notification.PRIORITY_DEFAULT) 21 .setAutoCancel(true) 22 .setDefaults(Notification.DEFAULT_SOUND) 23 .setContentIntent(contentintent); 24 notification.notify(Notificationid,builder.build()); 25 } 26}

java

1import android.app.*; 2import android.os.*; 3import android.widget.*; 4import android.view.View.*; 5import android.view.*; 6import android.view.inputmethod.*; 7import android.content.*; 8import java.util.*; 9public class MainActivity extends Activity implements OnClickListener{ 10 private RelativeLayout layout; 11 private InputMethodManager im; 12 private int notificationId=0; 13 @Override 14 public void onClick(View view){ 15 EditText edit=(EditText) findViewById(R.id.editText); 16 Intent bootintent=new Intent(this,Alarm.class); 17 bootintent.putExtra("notification",notificationId); 18 bootintent.putExtra("TODO",edit.getText()); 19 PendingIntent alarmintent=PendingIntent.getBroadcast(MainActivity.this,0,bootintent,PendingIntent.FLAG_CANCEL_CURRENT); 20 AlarmManager alarm=(AlarmManager) getSystemService(Context.ALARM_SERVICE); 21 TimePicker timepicker=(TimePicker) findViewById(R.id.timePicker); 22 23 switch(view.getId()){ 24 case R.id.set: 25 int hour=timepicker.getCurrentHour(); 26 int minute=timepicker.getCurrentMinute(); 27 28 Calendar start=Calendar.getInstance(); 29 start.set(Calendar.HOUR_OF_DAY,hour); 30 start.set(Calendar.MINUTE,minute); 31 start.set(Calendar.SECOND,0); 32 long alarmstart=start.getTimeInMillis(); 33 34 alarm.set(AlarmManager.RTC_WAKEUP,alarmstart,alarmintent); 35 36 Toast.makeText(MainActivity.this,"通知をセットしました",Toast.LENGTH_SHORT).show(); 37 notificationId++; 38 break; 39 case R.id.cancel: 40 alarm.cancel(alarmintent); 41 Toast.makeText(MainActivity.this,"通知をキャンセルしました",Toast.LENGTH_SHORT).show(); 42 break; 43 } 44 } 45 46 47 @Override 48 protected void onCreate(Bundle savedInstanceState) 49 { 50 super.onCreate(savedInstanceState); 51 setContentView(R.layout.main); 52 53 54 layout=(RelativeLayout) findViewById(R.id.mainLayout); 55 56 im=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 57 Button Click=(Button) findViewById(R.id.set); 58 Click.setOnClickListener(this); 59 60 Button cancel=(Button) findViewById(R.id.cancel); 61 cancel.setOnClickListener(this); 62 } 63 64 @Override 65 public boolean onTouchEvent(MotionEvent event) 66 { 67 im.hideSoftInputFromWindow(layout.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 68 layout.requestFocus(); 69 return false; 70 } 71}

どこか間違いはありますか?よろしくお願いします。

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

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

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

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

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

yona

2016/04/10 00:21

エラーログを追記してください。
guest

回答1

0

ベストアンサー

位置情報マネージャーをノーティフィケーションマネージャーにキャストしているのでクラスキャストエクセプションが発生していますね。

Java

1NotificationManager notification=(NotificationManager) context.getSystemService(Context.LOCATION_SERVICE);

ノーティフィケーションマネージャーを取得するには上記のコードではなく下記のようにしないといけません。

Java

1NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

投稿2016/04/10 02:21

編集2016/04/10 03:18
yona

総合スコア18155

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

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

sun-solar-arrow

2016/04/10 03:04 編集

NotificationManager mNotificationManager =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); ではエラーが出ましたが NotificationManager mNotificationManager =(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); で上手く行きました。
yona

2016/04/10 03:16

contextが抜けてましたね、ごめんなさい
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問