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

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

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

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

Android

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

Android Studio

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

Q&A

1回答

644閲覧

Fragment内で加速度センサーの値を出力したい

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/11/12 06:29

編集2022/01/12 10:55

###前提・実現したいこと

アプリ開発初心者です。よろしくお願いいたします。

Android Studioで、ある既存のアプリを改良しています。
アプリ内のFragmentが生きている間に、加速度センサーの値をファイルに出力したいです。

まず加速度センサーを出力するアプリを別で作成しました。
その後、コードを既存アプリのFragment内に書き写していきました。
通常通りアプリは動作するのですが、値・ログが出力されません

勉強不足のため全く見当違いのことをしているかもしれません。どうぞ宜しくお願いします。

※既存アプリの概要は、避難訓練のアプリです。
端末を持って歩き、ある地点に到達するとこのFragmentが起動し、画像や選択肢、テキストボックスが表示されます。

※加速度センサーの値を出力するアプリは、以下を参考にして作りました。
https://teratail.com/questions/49794

###発生している問題・エラーメッセージ
アプリは通常通り動作するのですが、値が出力されません。
Log.dのでも出力されません。

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

Java

1 2public class EventNoteFragment extends Fragment implements SensorEventListener { 3 4 private static final String TAG = EventNoteFragment.class.getSimpleName(); 5 private static final String URL_FORMAT = "http://training.bosai.club/images/event/%d.jpg"; 6 private EventDialogActivity parent; 7 private HashMap<Integer, Integer> scoreMap; 8 9 private Target panoTarget = null; 10 11 public Sensor accSensor; 12 public SensorManager manager; 13 public int button_flag = 0; 14 15 @Override 16 public void onSensorChanged(SensorEvent sensorEvent) { 17 18 manager = (SensorManager) getActivity().getSystemService(SENSOR_SERVICE); 19 accSensor = this.manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 20 21 if (button_flag == 0) { 22 23 Log.d("SENSOR_DATA", "TYPE_ACCELEROMETER1 = " + String.valueOf(sensorEvent.values[0])); 24 25 try { 26 //出力先を作成する 27 FileWriter fw = new FileWriter(Environment.getExternalStorageDirectory().getPath() + "/test.csv", true); 28 PrintWriter pw = new PrintWriter(new BufferedWriter(fw)); 29 30 //内容を指定する 31 pw.print(String.valueOf(sensorEvent.values[0])); 32 pw.print(","); 33 pw.print(String.valueOf(sensorEvent.values[1])); 34 pw.print(","); 35 pw.print(String.valueOf(sensorEvent.values[2])); 36 pw.println(); 37 38 //ファイルに書き出す 39 pw.close(); 40 41 } catch (IOException ex) { 42 //例外時処理 43 ex.printStackTrace(); 44 } 45 46 } else { 47 48 } 49 50 } 51 52 @Override 53 public void onAccuracyChanged(Sensor sensor, int accuracy) { 54 Log.d("hoge", "hogege"); 55 56 } 57 58 public void onAttach(Activity activity) { 59 parent = (EventDialogActivity) activity; 60 61 super.onAttach(activity); 62 } 63 64 @Nullable 65 @Override 66 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 67 68 final View view = inflater.inflate(R.layout.fragment_event_note, container, false); 69 view.findViewById(R.id.button_event_note).setOnClickListener(new EventAlertButtonClickListener()); 70 71 // Set description 72 ((TextView) view.findViewById(R.id.label_event_note_description)).setText(parent.missionArea.getDescription()); 73 74 // Set situation 75 final String[] situations = getResources().getStringArray(R.array.event_type_situations); 76 final String situationText = getString(R.string.label_event_situation, 77 parent.missionArea.getTitle(), 78 situations[parent.missionArea.getEventType().getId()]); 79 80 final TextView labelEventNoteSituationTextView = (TextView) view.findViewById(R.id.label_event_note_situation); 81 labelEventNoteSituationTextView.setText(situationText); 82 83 final TextView labelEventNoteTextView = (TextView) view.findViewById(R.id.label_event_note); 84 final EditText editEventNoteEditText = (EditText) view.findViewById(R.id.edit_event_note); 85 86 switch (parent.missionArea.getAreaType()) { 87 case START: 88 labelEventNoteSituationTextView.setBackgroundColor(getResources().getColor(R.color.event_red)); 89 90 labelEventNoteTextView.setText(R.string.label_event_note_start); 91 editEventNoteEditText.setHint(R.string.hint_note_start); 92 break; 93 case EVENT: 94 labelEventNoteSituationTextView.setBackgroundColor(getResources().getColor(R.color.event_orange)); 95 96 labelEventNoteTextView.setText(R.string.label_event_note_event); 97 editEventNoteEditText.setHint(R.string.hint_note_event); 98 99 break; 100 case INFORMATION: 101 labelEventNoteSituationTextView.setBackgroundColor(getResources().getColor(R.color.event_blue)); 102 break; 103 case GOAL: 104 labelEventNoteSituationTextView.setBackgroundColor(getResources().getColor(R.color.event_green)); 105 break; 106 } 107 108 // Set image 109 final ImageView eventNoteImageView = (ImageView) view.findViewById(R.id.image_event_note); 110 final VrPanoramaView panoView = (VrPanoramaView) view.findViewById(R.id.pano_view); 111 if (parent.missionArea.getAreaType() == AreaType.EVENT) { 112 // EVENT 113 final String imageUrl = String.format(URL_FORMAT, parent.missionArea.getId() % 100); // もとのURL取得 114 115 panoTarget = new Target() { 116 @Override 117 public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 118 VrPanoramaView.Options panoOptions = null; 119 panoOptions = new VrPanoramaView.Options(); 120 panoOptions.inputType = VrPanoramaView.Options.TYPE_MONO; 121 122 eventNoteImageView.setVisibility(View.INVISIBLE); 123 panoView.setVisibility(View.VISIBLE); 124 panoView.loadImageFromBitmap(bitmap, panoOptions); 125 126 panoView.setFullscreenButtonEnabled(true); 127 panoView.setInfoButtonEnabled(false); 128 panoView.setTouchTrackingEnabled(true); 129 panoView.setStereoModeButtonEnabled(false); 130 } 131 132 @Override 133 public void onBitmapFailed(Drawable errorDrawable) { 134 eventNoteImageView.setVisibility(View.VISIBLE); 135 panoView.setVisibility(View.INVISIBLE); 136 eventNoteImageView.setImageDrawable(errorDrawable); 137 } 138 139 @Override 140 public void onPrepareLoad(Drawable placeHolderDrawable) { 141 eventNoteImageView.setVisibility(View.VISIBLE); 142 panoView.setVisibility(View.INVISIBLE); 143 eventNoteImageView.setImageDrawable(placeHolderDrawable); 144 } 145 }; 146 147 Picasso.with(parent).load(imageUrl).into(panoTarget); 148 } else { 149 // START, GOAL, INFORMATION 150 eventNoteImageView.setVisibility(View.VISIBLE); 151 panoView.setVisibility(View.INVISIBLE); 152 153 final String imageResName = "image_" + parent.missionArea.getEventType().toString().toLowerCase(); 154 final int imageResId = getResources().getIdentifier(imageResName, "drawable", parent.getPackageName()); 155 eventNoteImageView.setImageResource(imageResId); 156 } 157 158 int actionCount = parent.missionArea.getAction().length; 159 160 // Generate random index 161 Integer[] indexes = new Integer[actionCount]; 162 for (int i = 0; i < indexes.length; i++) { 163 indexes[i] = i; 164 } 165 166 List<Integer> indexList = Arrays.asList(indexes); 167 Collections.shuffle(indexList); 168 169 // Set radiobutton 170 scoreMap = new HashMap<>(); 171 for (int i = 0; i < actionCount; i++) { 172 int buttonResId = getResources().getIdentifier("event_action_select" + i, "id", parent.getPackageName()); 173 final RadioButton radioButton = (RadioButton) view.findViewById(buttonResId); 174 175 int index = indexList.get(i); // Random-ordered index 176 177 radioButton.setText(parent.missionArea.getAction()[index]); 178 179 // key: ResourceId of Radio Button, value: score 180 scoreMap.put(radioButton.getId(), parent.missionArea.getScore()[index]); 181 182 radioButton.setVisibility(View.VISIBLE); 183 } 184 185 final RadioGroup radioGroup = (RadioGroup) view.findViewById(R.id.radio_group_event_action); 186 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 187 @Override 188 public void onCheckedChanged(RadioGroup group, int checkedId) { 189 final EditText otherActionEditText = (EditText) view.findViewById(R.id.other_action_edit_text); 190 191 if (checkedId == R.id.event_action_select_other) { 192 otherActionEditText.setVisibility(View.VISIBLE); 193 } else { 194 otherActionEditText.setVisibility(View.GONE); 195 } 196 } 197 198 }); 199 return view; 200 } 201 202 private class EventAlertButtonClickListener implements View.OnClickListener { 203 204 @Override 205 public void onClick(View v) { 206 final EditText otherActionEditText = (EditText) getActivity().findViewById(R.id.other_action_edit_text); 207 final boolean isOtherActionWrote = !otherActionEditText.getText().toString().equals(""); 208 209 final RadioGroup radioGroup = (RadioGroup) getActivity().findViewById(R.id.radio_group_event_action); 210 final int selectedActionId = radioGroup.getCheckedRadioButtonId(); 211 final boolean isActionSelected = ((selectedActionId == R.id.event_action_select_other) && isOtherActionWrote) 212 || ((selectedActionId != R.id.event_action_select_other) && (selectedActionId > 0)); 213 214 final EditText descriptionEditText = (EditText) getActivity().findViewById(R.id.edit_event_note); 215 final boolean isNoteWrote = !descriptionEditText.getText().toString().equals(""); 216 217 if (isActionSelected && isNoteWrote) { 218 // Action 219 RadioButton selectedRadioButton = (RadioButton) getActivity().findViewById(selectedActionId); 220 221 parent.actionPoint.setSelectedAction(selectedRadioButton.getText().toString()); 222 parent.actionPoint.setSelectedActionNote(otherActionEditText.getText().toString()); 223 224 if (scoreMap.containsKey(selectedRadioButton.getId())) { 225 final Integer score = scoreMap.get(selectedRadioButton.getId()); 226 parent.actionPoint.setScore(score); 227 } else { 228 parent.actionPoint.setScore(3); 229 } 230 231 // Note 232 parent.actionPoint.setDescription(descriptionEditText.getText().toString()); 233 234 parent.decideFragment(EventDialogActivity.Step.ADVICE); 235 } else { 236 Toast.makeText(parent, getString(R.string.info_no_input), Toast.LENGTH_SHORT).show(); 237 } 238 }

###補足情報(言語/FW/ツール等のバージョンなど)
端末:NEXUS7
minSdkVersion:19
targetSdkVersion:21

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

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

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

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

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

keicha_hrs

2017/11/12 07:16

ソースコードは<code>というボタンを押したら出てくる```の間に挟んでください。最初の方の```の末尾にJavaと入れると、Javaコード用の表示になるので見やすくなります。
退会済みユーザー

退会済みユーザー

2017/11/12 07:25

申し訳ありません。改善しました。
guest

回答1

0

Fragmentがどうこうではないような感じがしますね。

Java

1 @Override 2 public void onSensorChanged(SensorEvent sensorEvent) { 3 4 manager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE); 5 accSensor = this.manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

ここからしておかしくないでしょうか。getSystemServiceやgetDefaultSensorは事前処理として行うもので、それらを行ってからregisterListenerを設定することで、センサーの値が変化したときにonSensorChangedが呼び出される流れになるはずです。

ところが、上記のコードだとそのonSensorChangedの中で初期設定すべきことを行っているのですから、処理があべこべではありませんか?registerListenerしているところも見当たりませんし。参考にしたというページのコードと行っていることが全然違います。

これでは動かなくて当然のような気がしますが・・・。

(追伸)

投稿2017/11/12 11:29

keicha_hrs

総合スコア6766

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問