【发布时间】:2021-06-03 18:34:17
【问题描述】:
我正在尝试将从geocoderAPI 获取的地址插入到我的edittext 字段中。在我的应用中授予位置权限后,我的edittext字段中没有插入任何文本,甚至也没有调用短信权限。
我的代码:
public class message extends AppCompatActivity {
EditText edittext;
Button send;
FusedLocationProviderClient fusedLocationProviderClient;
ArrayList<String> contacts=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message);
send = findViewById(R.id.button);
edittext = findViewById(R.id.msg);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
contacts = getIntent().getStringArrayListExtra("contacts");
if(ActivityCompat.checkSelfPermission(message.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
fusedLocationProviderClient.getLastLocation().addOnCompleteListener(new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
Location location = task.getResult();
if (location != null){
try {
Geocoder geocoder = new Geocoder(message.this, Locale.getDefault());
List<Address> address = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
Log.d("address", address.get(0).getAddressLine(0));
edittext.setText(address.get(0).getAddressLine(0));
sos_message();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}else
ActivityCompat.requestPermissions(message.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);
}
private void sos_message() {
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(ActivityCompat.checkSelfPermission(message.this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED){
try {
SmsManager sms = SmsManager.getDefault();
if ((contacts != null) || (edittext.getText().toString().length() != 0)) {
for (int i = 0; i < contacts.size(); i++) {
sms.sendTextMessage(String.valueOf(contacts.get(i)), null, edittext.getText().toString(), null, null);
}
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Message sent successfully", Snackbar.LENGTH_LONG);
snackbar.show();
} else {
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Please try again", Snackbar.LENGTH_LONG);
snackbar.show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
else
ActivityCompat.requestPermissions(message.this, new String[]{Manifest.permission.SEND_SMS}, 44);
}
});
}
}
我的 AndroidManifest.xml 权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS" />
【问题讨论】:
-
您是否在活动中覆盖了
onRequestPermissionsResult方法?必须实施此方法,以便处理您的权限请求。请在此处查看:developer.android.com/training/permissions/requesting#java -
而没有调用sms权限的原因可能是因为位置返回null并且没有通过
if (location != null){中的if条件 -
Geocoder 类后端仅存在于 Google 批准的设备上。因此,在任何没有 GMail/Market/Maps 的设备上,查找基本上都会失败。
-
@KidusTekeste 在我运行应用程序时确实会要求位置许可,但我的地址从未被提取并插入到
edittext字段中
标签: java android-studio android-intent google-geocoder smsmanager