Skip to content

Commit

Permalink
전화 받음
Browse files Browse the repository at this point in the history
  • Loading branch information
sjhan0525 committed Aug 25, 2019
1 parent cac9c6b commit 5f42414
Show file tree
Hide file tree
Showing 7 changed files with 310 additions and 37 deletions.
31 changes: 21 additions & 10 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,6 @@
<manifest xmlns:android="http:https://schemas.android.com/apk/res/android"
package="com.example.pc.caseproject">

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<application
android:name=".MyApplication"
android:allowBackup="true"
Expand All @@ -17,8 +11,8 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ProviderActivity" />

<activity android:name=".ProviderActivity"/>
<activity android:name=".NavigationActivity" />
<activity android:name=".FindAEDActivity" />
<activity android:name=".MainActivity">
Expand All @@ -35,6 +29,9 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.pc.caseproject.MainActivity" />
</activity>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyC5oOyC8TGp55vhevebPTPnnWZict3Njbc" />

<service
android:name=".MessagingService"
Expand All @@ -44,9 +41,23 @@
</intent-filter>
</service>

<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyC5oOyC8TGp55vhevebPTPnnWZict3Njbc" />
<service
android:name=".CallWaitService"
android:enabled="true"
android:exported="true"></service>
</application>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

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

</manifest>
182 changes: 182 additions & 0 deletions app/src/main/java/com/example/pc/caseproject/CallWaitService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
package com.example.pc.caseproject;

import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.os.Build;
import android.os.IBinder;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NotificationCompat;
import android.telecom.TelecomManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;


public class CallWaitService extends Service {
TelephonyManager telephonyManager;
static public String strstate = "";
Boolean isworking = false;
int count =0;

public CallWaitService() {
}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@SuppressLint("WrongConstant")
@RequiresApi(api = Build.VERSION_CODES.N)
private void ServiceStart() {

if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) {

Notification.Builder builder = new Notification.Builder(this, "Channel1")
.setContentTitle(getString(R.string.app_name))
.setContentText("Connected through SDL")
.setSmallIcon(R.drawable.ic_launcher_background)
.setPriority(Notification.PRIORITY_DEFAULT);


Notification notification = builder.build();

startForeground(1, notification);

}
else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.O){
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String channelId = getString(R.string.app_name);
NotificationChannel notificationChannel = new NotificationChannel(channelId, channelId, NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.setDescription(channelId);
notificationChannel.setSound(null, null);

notificationManager.createNotificationChannel(notificationChannel);
Notification notification = new Notification.Builder(this, channelId)
.setContentTitle(getString(R.string.app_name))
.setContentText("Connected through SDL")
.setSmallIcon(R.drawable.ic_launcher_background)
.setPriority(Notification.PRIORITY_DEFAULT)
.build();

startForeground(1, notification);
}
else {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setContentTitle(getString(R.string.app_name))
.setContentText("Action1")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setAutoCancel(true);

Notification notification = builder.build();

startForeground(1, notification);
}

}

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
ServiceStart();
telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);

Toast.makeText(getApplication(),"시작!", Toast.LENGTH_LONG).show();
if(isworking == false) {
Thread bt = new Thread(new Runnable() {
@Override
public void run() {
count = 0;
setAudioSoundMax();
boolean ring = true;
while (true) {
try {
Thread.sleep(200);
count++;
System.out.println(count);
if (count >= 5500) {
isworking= false;
return;

}
// System.out.println("시작");
ring = getTelecomState(ring);


} catch (Exception e) {
Log.e("BaseService", e.toString());
}
}
}
});
bt.start();
isworking = true;
}


return START_STICKY;
}

public boolean getTelecomState(boolean ring) {
TelecomManager tm;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
tm = (TelecomManager) getApplication().getSystemService(Context.TELECOM_SERVICE);


if (tm == null) {
return false;
}
if (ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.ANSWER_PHONE_CALLS) != PackageManager.PERMISSION_GRANTED) {
return false;
}

tm.acceptRingingCall();
setAudioSpeakPhone();

}
return false;
}





private void setAudioSoundMax(){
AudioManager audio = (AudioManager)getApplication().getSystemService(Context.AUDIO_SERVICE);

try {
audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audio.setStreamVolume(AudioManager.STREAM_RING,
audio.getStreamMaxVolume(AudioManager.STREAM_RING), AudioManager.FLAG_PLAY_SOUND);
}
catch(Exception ex)
{
System.out.println("통화 안됨");
}

audio.setStreamVolume(AudioManager.STREAM_MUSIC,
audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_PLAY_SOUND);
audio.setMode(AudioManager.MODE_NORMAL);
audio.setWiredHeadsetOn(false);
audio.setSpeakerphoneOn(true);

}

private void setAudioSpeakPhone(){
AudioManager audio = (AudioManager)getApplication().getSystemService(Context.AUDIO_SERVICE);
audio.setWiredHeadsetOn(false);
audio.setSpeakerphoneOn(true);
}

}
53 changes: 52 additions & 1 deletion app/src/main/java/com/example/pc/caseproject/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package com.example.pc.caseproject;

import android.Manifest;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
import android.support.annotation.NonNull;
Expand All @@ -16,6 +22,7 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

Expand All @@ -38,7 +45,7 @@ public class MainActivity extends AppCompatActivity {
Toolbar toolbar;
private ArrayList<Integer> missingPermissions;
private String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.SEND_SMS, Manifest.permission.READ_PHONE_STATE};
Manifest.permission.SEND_SMS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.ANSWER_PHONE_CALLS};
EmergencyDialogFragment popup;

@Override
Expand All @@ -62,6 +69,9 @@ protected void onCreate(Bundle savedInstanceState) {
//주변 AED 찾기 버튼 누르면 실행될 메서드 입니다.
@OnClick(R.id.cprButton)
public void onCPRButtonClicked(View v) {
requestAllPermissions();
notificationinit();

Intent intent = new Intent(this, HeartActivity.class);
startActivity(intent);
}
Expand Down Expand Up @@ -103,6 +113,23 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
}
}
}
switch (requestCode) {
case 11: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

} else {
}
return;
}
case 0: {
if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
//TODO
}
break;
}
}
}

@Override
Expand Down Expand Up @@ -202,4 +229,28 @@ public void phoneNumber(){
}
Log.d("phone", pn);
}

public void notificationinit() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

Intent backStartIntent = new Intent(MainActivity.this, CallWaitService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel notificationChannel = new NotificationChannel("channel1", "1번채널", NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.setDescription("1번채널입니다");
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.GREEN);
notificationChannel.enableVibration(true);
notificationChannel.setVibrationPattern(new long[]{100, 200, 100, 200});
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
notificationManager.createNotificationChannel(notificationChannel);
startForegroundService(backStartIntent);

} else {
startService(backStartIntent);
}
}
}
Loading

0 comments on commit 5f42414

Please sign in to comment.