Android 모바일 앱 개발을 배우고 있습니다. 나는 간단한 앱을 만들어 SMS를 보냈다. marshmallow를 실행하는 ADB 에뮬레이터를 사용하고 있습니다. 나는 그것에 대해 새로운 허가 here을 읽고 많은 문제가있는 내 문제에 answers 발견했습니다. 빌드 실패 - Android Marshmallow SMS_SEND 오류 : Gradle : java.io.FileNotFoundException : (액세스가 거부되었습니다.)
나는 CLEAN을하고 난 다음 메시지와 함께 인사를하고 구축
:Error:Gradle: java.io.FileNotFoundException: C:Examples\MySMSApplication\app\build\intermediates\res\resources-debug.ap_ (Access is denied)
참고 : 나는 내가 uses-permission android:name="android.permission.SEND_SMS
을 제거 할 때 성공적으로 응용 프로그램을 구축하고 실행할 수입니다. 그러나 다른 에뮬레이터 번호 5554를 말하도록 SMS를 보내려고 할 때 항상 내 메시지 Permission denied
을 받게됩니다.
두 개의 사용자 권한 세트가있는 Android 매니페스트가 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.fisher.app">
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/mysmsapp"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
그런 다음 mainActivity 여기
public class MainActivity extends AppCompatActivity {
Button buttonSend;
EditText textPhoneNo;
EditText textSMS;
private static final int PERMISSION_REQUEST = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonSend = (Button) findViewById(R.id.buttonSend);
textPhoneNo = (EditText) findViewById(R.id.editTextPhoneNo);
textSMS = (EditText) findViewById(R.id.editTextSMS);
buttonSend.setOnClickListener(new View.OnClickListener() {
//this is the onclick listener of send button
@Override
public void onClick(View v) {
String phoneNo = textPhoneNo.getText().toString();
String sms = textSMS.getText().toString();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(Manifest.permission.SEND_SMS)) {
Snackbar.make(findViewById(R.id.myView), "You need to grant SEND SMS permission to send sms",
Snackbar.LENGTH_LONG).setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST);
}
}).show();
} else {
requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSION_REQUEST);
}
} else {
sendSMS(phoneNo, sms);
}
} else {
sendSMS(phoneNo, sms);
}
}
});
}
private void sendSMS(String phoneNo, String message) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNo, null, message, null, null);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Snackbar.make(findViewById(R.id.myView), "Permission Granted",
Snackbar.LENGTH_LONG).show();
sendSMS(textPhoneNo.getText().toString(), textSMS.getText().toString());
} else {
Snackbar.make(findViewById(R.id.MyView), "Permission denied",
Snackbar.LENGTH_LONG).show();
}
}
}
에 Gradle을이 타이밍에서 빌드입니다 :
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.fisher.myapp"
minSdkVersion 23
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.1.1'
}
API 24 이후부터는 런타임에 권한을 요청해야합니다. https://developer.android.com/training/permissions/requesting.html –
@AmanGrover 동일한 링크를 언급 했으므로 런타임은 무엇이 아니라고합니다. 내 onClick 이벤트가 무엇입니까? 둘째로 저는 이것을 만들 수 없습니다. 앱이 에뮬레이터에로드되기 전에 Gradle에서 오류가 발생하는 것을 잘 알고 있습니다. –