마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

마시멜로 권한 소스 문제 빨간줄

0 추천

 

사진이 잘 보이실련지??

import android.support.v4.app.ActivityCompat;

했는데도 저렇게 빨간줄이 그어지네요....

저런 현상 겪어보신 분 계신지요?

public void mkdir() {
 
        if (Build.VERSION.SDK_INT >= 23) {
            //Toast.makeText(LinegraphBle.this, "마시멜로 이상의 핸드폰입니다..^^", Toast.LENGTH_SHORT).show();
            if (ActivityCompat.checkSelfPermission(LinegraphBle.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                //Toast.makeText(LinegraphBle.this, "2222.^^", Toast.LENGTH_SHORT).show();
                String str = Environment.getExternalStorageState();
                if ( str.equals(Environment.MEDIA_MOUNTED)) {
                    Toast.makeText(LinegraphBle.this, "3333.^^", Toast.LENGTH_SHORT).show();
                    File path= new File(android.os.Environment.getExternalStorageDirectory(),"/EXFO");
                    //String path = Environment.getExternalStorageDirectory().getAbsolutePath();
                    //File dir = new File(path, "mPM100");
                    if(!path.isDirectory()) {
                        path.mkdir();
                        //Toast.makeText(LinegraphBle.this, "폴더 생성 완료", Toast.LENGTH_SHORT).show();
                    }
                }
                else {
                     //Toast.makeText(LinegraphBle.this, "SD Card 인식 실패", Toast.LENGTH_SHORT).show();
                }
                    
            } else {
                //Toast.makeText(LinegraphBle.this, "4444.^^", Toast.LENGTH_SHORT).show();
                ActivityCompat.requestPermissions(LinegraphBle.this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        REQUEST_WRITE_STORAGE);
            }
        } else {
            //Toast.makeText(LinegraphBle.this, "롤리팝 이상의 핸드폰입니다..22^^", Toast.LENGTH_SHORT).show();
            String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
            sdPath += "/EXPO";
            File file = new File(sdPath);
            if(!file.isDirectory()){
                file.mkdir();
            }
        }
    }


             
             
 

그림에 나온 소스는 위와 같구요...

빨간줄에는 메서드가 undefined 라고 나오네요..

메니페스트에는 추가가 되어 있습니다.

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

 

개발환경은 이클립스 입니다.

앤드류이드 (6,190 포인트) 님이 2016년 10월 6일 질문
앤드류이드님이 2016년 10월 6일 수정

3개의 답변

+1 추천

PermissionChecker

public final class PermissionChecker 
extends Object 

java.lang.Object
   ↳android.support.v4.content.PermissionChecker
 

https://developer.android.com/reference/android/support/v4/content/PermissionChecker.html

aucd29 (218,390 포인트) 님이 2016년 10월 6일 답변
감사합니다.. 이건 추후 공부해야겠네요
0 추천
android.support.v4.context.ContextCompat 을 이용하세요.
바램 (19,650 포인트) 님이 2016년 10월 6일 답변
마찬가지에요 ㅠㅠ
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;

ContextCompat.self~~~~~~~
같은 글씨로 빨간줄 그어집니다. ㅠㅠ

The method checkSelfPermission(LinegraphBle, String) is undefined for the type ContextCompat
checkSelfPermission 의 첫번째 인자값은 context 가 들어와야 합니다.
LinegraphBle 라는 클래스가 Context를 상속받은 클래스가 맞는지요? 맞지 않다면 현재 실행되는 Activity의 this를 넘겨주셔야만 합니다.
private Context mcontext;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_graph);   
        
        mcontext = this;
}


if (ContextCompat.checkSelfPermission(mcontext, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
....

여전히 같은 에러...

제가 뭔가 잘못하고 있나요?
0 추천
뭐 크게 신경 쓰실 필요는 없는 부분이긴 하지만 직접 빌드 해보시면 아시겠지만 빌드에는 문제가 없습니다.

해당 오류는 하위버전을 지원하면서 생기는 문제 입니다.

해당 메소드가 하위버전에서는 지원을 하지 않기 때문이죠~~!

newapi annotation을 추가하시면 빨간줄은 없어질거에요~~!

질문을 잘못 보았네요~~!
ThisPlus (46,920 포인트) 님이 2016년 10월 7일 답변
해당 함수는 스트링하나만 인자로 받고 있습니다.
콘텍스트가 왜 들어가나요?
콘텍스트 빼고 퍼미션 스트링만 넣으세요
...