안드로이드 자바소스 오류 채택완료
아래 소스중에 빨간색으로 표시된부분에 빨간색 밑줄이 쳐집니다오류를 잡을려면 어찌해야 할까요.package call.exam.jsh.telepo; import android.Manifest; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony.TelephonyManager; import android.view.View; import android.widget.Button; import android.widget.Toast; import android.os.AsyncTask; import android.widget.TextView; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URI; import java.net.URL; import static android.R.attr.name; import static call.exam.jsh.telepo.MainActivity.Test.myPhoneNumber; import static call.exam.jsh.telepo.R.layout.activity_main; public class MainActivity extends AppCompatActivity { private Button button; private Button button1; Button button2; Button button3; TextView txtview; phpdo task; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(activity_main); String id = myPhoneNumber(); String name = ""; task = new phpdo(); txtview = (TextView) findViewById(R.id.txtView); task.execute(id, name); button = (Button) findViewById(R.id.button); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.Button2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, Pop.class)); } }); button3 = (Button) findViewById(R.id.Button3); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, Pop1.class)); } }); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 사용자의 OS 버전이 마시멜로우 이상인지 체크한다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { /** * 사용자 단말기의 권한 중 "전화걸기" 권한이 허용되어 있는지 확인한다. * Android는 C언어 기반으로 만들어졌기 때문에 Boolean 타입보다 Int 타입을 사용한다. * */ int permissionResult = checkSelfPermission(Manifest.permission.CALL_PHONE); /** * 패키지는 안드로이드 어플리케이션의 아이디이다. * 현재 어플리케이션이 CALL_PHONE에 대해 거부되어있는지 확인한다. */ if (permissionResult == PackageManager.PERMISSION_DENIED) { /** * 사용자가 CALL_PHONE 권한을 거부한 적이 있는지 확인한다. * 거부한적이 있으면 True를 리턴하고 * 거부한적이 없으면 False를 리턴한다. */ if (shouldShowRequestPermissionRationale(Manifest.permission.CALL_PHONE)) { AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); dialog.setTitle("권한이 필요합니다.") .setMessage("이 기능을 사용하기 위해서는 단말기의 \"전화걸기\" 권한이 필요합니다. 계속 하시겠습니까?") .setPositiveButton("네", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { /** * 새로운 인스턴스(onClickListener)를 생성했기 때문에 * 버전체크를 다시 해준다. */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // CALL_PHONE 권한을 Android OS에 요청한다. requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000); } } }) .setNegativeButton("아니요", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "기능을 취소했습니다", Toast.LENGTH_SHORT).show(); } }) .create() .show(); } // 최초로 권한을 요청할 때 else { // CALL_PHONE 권한을 Android OS에 요청한다. requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000); } } // CALL_PHONE의 권한이 있을 때 else { // 즉시 실행 Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:010-5636-7684")); startActivity(intent); } } // 마시멜로우 미만의 버전일 때 else { // 즉시 실행 Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:010-5636-7684")); startActivity(intent); } } }); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 사용자의 OS 버전이 마시멜로우 이상인지 체크한다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { /** * 사용자 단말기의 권한 중 "전화걸기" 권한이 허용되어 있는지 확인한다. * Android는 C언어 기반으로 만들어졌기 때문에 Boolean 타입보다 Int 타입을 사용한다. * */ int permissionResult = checkSelfPermission(Manifest.permission.CALL_PHONE); /** * 패키지는 안드로이드 어플리케이션의 아이디이다. * 현재 어플리케이션이 CALL_PHONE에 대해 거부되어있는지 확인한다. */ if (permissionResult == PackageManager.PERMISSION_DENIED) { /** * 사용자가 CALL_PHONE 권한을 거부한 적이 있는지 확인한다. * 거부한적이 있으면 True를 리턴하고 * 거부한적이 없으면 False를 리턴한다. */ if (shouldShowRequestPermissionRationale(Manifest.permission.CALL_PHONE)) { AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); dialog.setTitle("권한이 필요합니다.") .setMessage("이 기능을 사용하기 위해서는 단말기의 \"전화걸기\" 권한이 필요합니다. 계속 하시겠습니까?") .setPositiveButton("네", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { /** * 새로운 인스턴스(onClickListener)를 생성했기 때문에 * 버전체크를 다시 해준다. */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // CALL_PHONE 권한을 Android OS에 요청한다. requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000); } } }) .setNegativeButton("아니요", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "기능을 취소했습니다", Toast.LENGTH_SHORT).show(); } }) .create() .show(); } // 최초로 권한을 요청할 때 else { // CALL_PHONE 권한을 Android OS에 요청한다. requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1000); } } // CALL_PHONE의 권한이 있을 때 else { // 즉시 실행 Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:02-6078-0170")); startActivity(intent); } } // 마시멜로우 미만의 버전일 때 else { // 즉시 실행 Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:02-6078-0170")); startActivity(intent); } } }); } public class Test { public static String myPhoneNumber() { String myNumber = null; TelephonyManager mgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); try{ myNumber = mgr.getLine1Number(); myNumber = myNumber.replace("+82", "0"); }catch(Exception e){} return myNumber; } } private class phpdo extends AsyncTask{ protected void onPreExecute() { } @Override protected String doInBackground(String... arg0) { try { String id = arg0[0]; String link = "http://sun7684.dothome.co.kr/testquery.php?ID=" + id + "&NAME=" + name; URL url = new URL(link); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI(link)); HttpResponse response = client.execute(request); BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; while ((line = in.readLine()) != null) { sb.append(line); break; } in.close(); return sb.toString(); } catch (Exception e) { return new String("Exception: " + e.getMessage()); } } @Override protected void onPostExecute(String result) { //txtview.setText("Login Successful"); txtview.setText(result); } } }
답변 3개
static 변수특성상 내장 변수, 객체들을 사용할 수 없습니다
아래 소스로 수정하면 먹힐 것입니다
String id = myPhoneNumber(MainActivity.this);
public static String myPhoneNumber(Context context) { String myNumber = null; TelephonyManager mgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try{ myNumber = mgr.getLine1Number(); myNumber = myNumber.replace("+82", "0"); }catch(Exception e){} return myNumber; } }
로 수정하십시오
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
http://www.masterqna.com/android/17391/android-activity-%EC%83%81%EC%86%8D-%EC%97%86%EC%9D%B4-getsystemservice-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0">http://www.masterqna.com/android/17391/android-activity-%EC%83%81%EC%86%8D-%EC%97%86%EC%9D%B4-getsystemservice-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
댓글을 작성하려면 로그인이 필요합니다.
android 의 getSystemService 라는 메소드가 그냥은 사용 못하는 거였네요
getSystemService 를 포함하는 메소드의 클래스는 Activity 를 상속받고 있거나
Context 객체로 접근
https://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String)">https://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String)
https://stackoverflow.com/questions/4870667/how-can-i-use-getsystemservice-in-a-non-activity-class-locationmanager">https://stackoverflow.com/questions/4870667/how-can-i-use-getsystemservice-in-a-non-activity-class-locationmanager
해야 하는것 같습니다.
근데 호출자 부분이 이미 Activity 를 상속받고 있는것 같습니다.
public class MainActivity extends AppCompatActivity {
제가 해당 환경을 확실히 모르겠지만
올바르게 Activity 가 상속되었다는 가정하에
public class Test 삭제
import static call.exam.jsh.telepo.MainActivity.Test.myPhoneNumber; 삭제
후 MainActivity 에 메소드 추가하는 방식으로 해보면 될것 같네요
</p><p>public class MainActivity extends AppCompatActivity {</p><p> private Button button;</p><p> private Button button1;</p><p> Button button2;</p><p> Button button3;</p><p>
</p><p> TextView txtview;</p><p> phpdo task;</p><p>
</p><p> ...</p><p> public String myPhoneNumber() {</p><p> String myNumber = null; </p><p> TelephonyManager mgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); </p><p> try{ </p><p> myNumber = mgr.getLine1Number(); </p><p> myNumber = myNumber.replace("+82", "0"); </p><p> }catch(Exception e){} </p><p> return myNumber; </p><p> }</p><p> ...</p><p> @Override</p><p> protected void onCreate(Bundle savedInstanceState) {</p><p> super.onCreate(savedInstanceState);</p><p> setContentView(activity_main);</p><p> </p><p> String id = myPhoneNumber();</p><p> ...</p><p> }</p><p><span style="font-size: 14.6667px;"> ...</span> </p><p><span style="font-size: 14.6667px;"> ...</span><span style="font-size: 14.6667px;"> </span></p><p>}</p><p>
안될경우 Context 객체로 접근하는 방법도 시도해보시면 될것 같습니다.
답변에 대한 댓글 1개
getSystemService 부분에 빨간색 밑줄이 쳐지네요.. ㅠㅠ
그럼 이제 Context 객체로 접근하는 방법 밖에 없는 건가요?
알려주신 위 링크 2개를 들어가 봣는데... 도무지 모르겠네요..
Context 객체 접근은 더욱 어렵네요 ㅠㅠ
public class MainActivity extends AppCompatActivity {
private Button button;
private Button button1;
Button button2;
Button button3;
TextView txtview;
phpdo task;
public static String myPhoneNumber() {
String myNumber = null;
TelephonyManager mgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
try{
myNumber = mgr.getLine1Number();
myNumber = myNumber.replace("+82", "0");
}catch(Exception e){}
return myNumber;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(activity_main);
String id = myPhoneNumber();
String name = "";
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
String id = myPhoneNumber(MainActivity.this); 이렇게 불러오면 전화번호가 어떻게 들어 가는지요??
String id = 핸드폰번호; <- 이런식으로 들어 가나요??
String id = "핸드폰번호"; <- 이런식으로 들어가야 하거든요
어떻게 하면 핸드폰번호 앞뒤로 콤마가 붙여지나요??