마스터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일 답변
해당 함수는 스트링하나만 인자로 받고 있습니다.
콘텍스트가 왜 들어가나요?
콘텍스트 빼고 퍼미션 스트링만 넣으세요
...