gpt4 book ai didi

android - 与服务一起使用时使用 SMS 管理器时出现问题

转载 作者:行者123 更新时间:2023-11-29 02:29:27 26 4
gpt4 key购买 nike

我是安卓新手。我正在创建一个 android 服务,它检索当前位置并将其作为消息发送到特定号码。我几乎已经实现了,但是当我使用 SMSManager 发送检索到的位置值的消息时,应用程序崩溃了(我已经评论了附件中的代码)。我已经完成了检索当前位置并将其显示在 EditText 上的步骤。我已经包含了所有权限。请帮助我解决发送接收到的 Intent 值的消息的问题。我已经包含了 MainActivity 和 BroadcastService 的代码

int count=1;

@Override
protected void onResume() {
super.onResume();
if(broadcastReceiver == null){
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {

textView.setText("\n" +intent.getExtras().get("coordinates"));

String loc = textView.getText().toString();

/*
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage("7448958358", null, loc, null, null);
*/

}
};
}
registerReceiver(broadcastReceiver,new IntentFilter("location_update"));
}

@Override
protected void onDestroy() {
super.onDestroy();
if(broadcastReceiver != null){
unregisterReceiver(broadcastReceiver);
}
}
private void sendSMS(String phoneNumber, String message) {
Toast.makeText(this, "sending", Toast.LENGTH_SHORT).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn_start = (Button) findViewById(R.id.button);
btn_stop = (Button) findViewById(R.id.button2);
textView = (TextView) findViewById(R.id.textView);
if(!runtime_permissions())
{
enable_buttons();
}
}

private void enable_buttons() {

btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i =new Intent(getApplicationContext(),BroadcastService.class);
startService(i);
}
});

btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i =new Intent(getApplicationContext(),BroadcastService.class);
stopService(i);
}
});

}

private boolean runtime_permissions() {
if(Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){

requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.SEND_SMS,Manifest.permission.RECEIVE_SMS},100);

return true;
}
return false;
}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == 100){
if( grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED){
enable_buttons();
}else {
runtime_permissions();
}
}
}

BroadcastService.java

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@SuppressLint("MissingPermission")
@Override
public void onCreate() {
Toast.makeText(this, "Services has been started", Toast.LENGTH_SHORT).show();
listener = new LocationListener() {

@Override
public void onLocationChanged(Location location) {
Intent i = new Intent("location_update");
i.putExtra("coordinates",location.getLongitude()+" "+location.getLatitude());
sendBroadcast(i);
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
};

locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

//noinspection MissingPermission
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,3000,0,listener);

}

@Override
public void onDestroy() {
super.onDestroy();
if(locationManager != null){
//noinspection MissingPermission
locationManager.removeUpdates(listener);
}
}

我的崩溃日志说

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.prakaash.broadcastservice, PID: 27810
java.lang.RuntimeException: Error receiving broadcast Intent { act=location_update flg=0x10 (has extras) } in com.example.prakaash.broadcastservice.MainActivity$1@9f66542
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_51117(LoadedApk.java:1300)
at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.$m$0(Unknown Source:4)
at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.run(Unknown Source:0)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:172)
at android.app.ActivityThread.main(ActivityThread.java:6637)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.SecurityException: Neither user 10119 nor current process has android.permission.READ_PHONE_STATE.
at android.os.Parcel.readException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1888)
at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:867)
at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:330)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:313)
at com.example.prakaash.broadcastservice.MainActivity$1.onReceive(MainActivity.java:42)
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_51117(LoadedApk.java:1290)
at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.$m$0(Unknown Source:4) 
at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.run(Unknown Source:0) 
at android.os.Handler.handleCallback(Handler.java:789) 
at android.os.Handler.dispatchMessage(Handler.java:98) 
at android.os.Looper.loop(Looper.java:172) 
at android.app.ActivityThread.main(ActivityThread.java:6637) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

应用终止。

最佳答案

并非所有制造商都会出现此问题。官方文档没有具体说明是否需要请求此权限。一些制造商在实现 sendTextMessage 时存在问题,因此需要 READ_PHONE_STATE 权限。

要解决此问题,唯一的解决方法是将此权限添加到您的 list 和 requestPermissions

关于android - 与服务一起使用时使用 SMS 管理器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50423226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com