我正在尝试检索手机信号强度并在基于 4G 的手机上显示。我的手机构建是 LND-AL30 8.0.0.203 (C675)。这是否意味着我有 api 级别为 30 的 android ver 8?如果是这样,我可以使用哪个 Api 来获取信号强度?
问题:当应用程序启动时,当位置信息被禁用时,应用程序运行正常,但检索 cellInfo 对象(tm.getAllCellInfo)的零长度。
而如果我打开我的手机上的位置信息,应用程序崩溃异常:没有虚拟方法 cellInfo.getCellSignalStrength。你能请建议如何克服这个问题,并检索细胞信号强度?
是我使用的 Android SDK 版本。
建筑坡度
android {
compileSdk 31
defaultConfig {
applicationId "com.example.mobilenetworkinfo"
minSdk 31
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
具有所需权限的 Manifest.xml 文件:
uses-permission android:name="android.permission.READ_PHONE_STATE"
uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"
uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
uses-permission android:name="android.permission.INTERNET"
和 MainActivity.java 文件:
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.telephony.*;
public class MainActivity extends AppCompatActivity {
private final int REQUEST_READ_PHONE_STATE=1;
private final int REQUEST_ACCESS_COARSE_LOCATION=2;
private final int REQUEST_ACCESS_FINE_LOCATION=3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("onCreate", "added hello from onCreate");
}
@SuppressLint({"NewApi", "MissingPermission"})
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public void sendMessage(View view) {
int permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_STATE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE);
} else {
//TODO
}
int permissionCheck2 = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION);
if (permissionCheck2 != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_ACCESS_COARSE_LOCATION);
} else {
//TODO
}
int permissionCheck3 = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck3 != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
} else {
//TODO
}
Intent intent = new Intent(this, DisplayMessageActivity.class);
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
intent.putExtra("IMEI", tm.getImei());
intent.putExtra("SIM serial number", tm.getSimSerialNumber());
Integer i=0;
for( CellInfo cellInfo: tm.getAllCellInfo()) {
//for( i =1; i <= 6;i++){
i++;
intent.putExtra("cellSignalStrength"+i.toString(),
cellInfo.getCellSignalStrength().getDbm()+"");
}
intent.putExtra("CELLCOUNT", i+"");
Log.i("First", "added hello and count is " + i.toString());
startActivity(intent);
}
@SuppressLint({"MissingPermission", "NewApi"})
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[]
grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_READ_PHONE_STATE:
if ((grantResults.length > 0) && (grantResults[0] ==
PackageManager.PERMISSION_GRANTED)) {
}
break;
default:
break;
}
}
}
您正在使用 SDK 级别 18 进行编译。刚刚在 API 30 中添加了 getSignalStrength。您需要将目标 SDK 版本设置为至少 30 (并在至少 30 的设备上运行它) 才能编译。您可能也想使 minSDK 版本 30,或者您需要在调用它之前检查 API 级别。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(77条)