테스트 사이트 - 개발 중인 베타 버전입니다

안드로이드 자바소스 오류 채택완료

은빛여전사 8년 전 조회 2,334
아래 소스중에   빨간색으로 표시된부분에 빨간색 밑줄이 쳐집니다
오류를 잡을려면 어찌해야 할까요.


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개

채택된 답변
+20 포인트

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개

은빛여전사
8년 전
답변 감사합니다....
String id = myPhoneNumber(MainActivity.this); 이렇게 불러오면 전화번호가 어떻게 들어 가는지요??
String id = 핸드폰번호; <- 이런식으로 들어 가나요??

String id = "핸드폰번호"; <- 이런식으로 들어가야 하거든요
어떻게 하면 핸드폰번호 앞뒤로 콤마가 붙여지나요??

댓글을 작성하려면 로그인이 필요합니다.

8년 전

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개

은빛여전사
8년 전
알려 주신대로 아래처럼 해봤는데

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 = "";

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인