teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

Serviceのソースコード、試したこと、補足を追記

2019/02/13 13:22

投稿

mssgm
mssgm

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,18 +1,12 @@
1
1
  ### 前提・実現したいこと
2
-
3
2
  初めて質問させていただきます。
4
3
  Androidでアプリやブラウザ上に仮想ボタンのようなものを表示させ続けるアプリを作ろうと考えております。
5
-
6
4
  現在、アプリのトップ画面を形成するActivity内にServiceを開始する(仮想ボタンを表示させる)ボタンとSpinnerを設定しており、Spinnerで選択された値によって仮想ボタンが表示される初期位置を決められるようにしたいと考えております。
7
5
  そこで、Activity内のSpinnerで選択された値をService側へ送ればよいのではないかと考えており、intentを使ってActivityからServiceへ値を送りたいと考えております。しかし、Service側で値が参照できないのか、うまく値を送ることができません。
8
-
9
6
  ActivityからServiceへ値を送るにはどうすればよいのでしょうか?よくわかっていない部分も多く、コードも見づらいとは思いますがどなたかご助力いただければ幸いです。
10
- ### 発生している問題・エラーメッセージ
11
-
12
7
  ```
13
8
  Compilation failed; see the compiler error output for details.
14
9
  ```
15
-
16
10
  ### 該当のソースコード
17
11
 
18
12
  ```Java
@@ -150,12 +144,87 @@
150
144
  ```Java
151
145
  【TestService.java】
152
146
 
147
+ import android.app.Notification;
148
+ import android.app.NotificationChannel;
149
+ import android.app.NotificationManager;
150
+ import android.app.PendingIntent;
151
+ import android.app.Service;
152
+ import android.content.Context;
153
+ import android.content.Intent;
154
+ import android.graphics.PixelFormat;
155
+ import android.net.Uri;
156
+ import android.os.IBinder;
157
+ import android.util.Log;
158
+ import android.view.Gravity;
159
+ import android.view.LayoutInflater;
160
+ import android.view.MotionEvent;
161
+ import android.view.View;
162
+ import android.view.ViewGroup;
163
+ import android.view.WindowManager;
164
+ import android.widget.ImageButton;
165
+ import android.widget.TableLayout;
153
166
 
167
+ public class TestService extends Service {
168
+
169
+ //画面に全面表示させるビュー
170
+ private View view;
171
+ private WindowManager windowManager;
172
+ private int dpScale;
173
+ private ImageButton button1, button2, button3, button4, button5, button6;
174
+ private TableLayout tableLayout;
175
+
176
+ @Override
177
+ public void onCreate() {
178
+ super.onCreate();
179
+
180
+ // dipを取得
181
+ dpScale = (int)getResources().getDisplayMetrics().density;
182
+
183
+ }
184
+
185
+ @Override
186
+ public int onStartCommand(Intent intent, int flags, int startId) { // startServiceでサービスが開始要求を受けた時のコールバック。
187
+ // startForegroundService() -----
188
+
189
+ Context context = getApplicationContext();
190
+ String channelId = "default";
191
+ String title = context.getString(R.string.app_name);
192
+
193
+ ~(略)~
194
+ Intent intent = getIntent();
195
+ String item = intent.getStringExtra("①,②,③,④");
196
+ params.gravity = Gravity.TOP | Gravity.END;
197
+ if(item = intent.getStringExtra("①")) {
198
+ // 左上(①)に配置
199
+ params.x = 200 * dpScale; // 200dp
200
+ params.y = 80 * dpScale; // 80dp
201
+ }else if(item = intent.getStringExtra("②")) {
202
+ // 右上(②)に配置
203
+ params.x = 20 * dpScale; // 20dp
204
+ params.y = 80 * dpScale; // 80dp
205
+ }else if(item = intent.getStringExtra("③")) {
206
+ // 左下(③)に配置
207
+ params.x = 200 * dpScale; // 200dp
208
+ params.y = 300 * dpScale; //
209
+ }else {
210
+ // 右下(④)に配置
211
+ params.x = 20 * dpScale; // 20dp
212
+ params.y = 300 * dpScale; // 300dp
213
+ }
214
+ ~(略)~
154
215
  ```
155
216
  ### 試したこと
156
217
 
218
+ ```
219
+ Intent intent = getIntent();
220
+    ~(略)~
157
- ここ問題に対して試したことを記載してください。
221
+ // 右下(④)配置
158
-
222
+ params.x = 20 * dpScale; // 20dp
223
+ params.y = 300 * dpScale; // 300dp
224
+ }
225
+ ```
226
+ の部分にエラーが出ております。if文(あるいはそれ以外の条件文)を使うこと自体がおかしいのか、ServiceではgetIntentを用いること自体ができないのか、様々なサイトを調べましたが、解決方法が見つかりませんでした。
159
227
  ### 補足情報(FW/ツールのバージョンなど)
160
228
 
229
+ 言語:Java
161
- ここにより詳細な情報を記載してください。
230
+ 開発環境:Android Studio3.1.3