gpt4 book ai didi

Android:无法从线程获取 Imei

转载 作者:行者123 更新时间:2023-11-29 17:23:48 28 4
gpt4 key购买 nike

我有一项为新话题加注星标的服务。我的任务是从此线程中检索 IMEI。我试过这样的事情:

主要内容:

public class MainActivity extends AppCompatActivity {
String imei;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TelephonyManager mg=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
imei = mg.getDeviceId();


Intent intent = new Intent();
startService(new Intent(getBaseContext(), MyService.class));

}

public String getIMEI(){
Log.d("THIS IS THE IMEI", imei);
return imei;
}

这是我的服务类:

public class MyService extends Service {
Connection con = new Connection();
@Nullable
@Override
public IBinder onBind(Intent intent) {

return null;
}

@Override
public void onCreate(){

Thread t = new Thread(con);
t.start();
}

这是我的 Runnable 类:

public class Connection implements Runnable {
MainActivity app = new MainActivity();

@Override
public void run() {
String imei = app.getIMEI();
}

但是当我的代码到达 String imei = app.getIMEI() 时,我的应用程序崩溃并抛出异常。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.asder.vediamo/com.asder.vediamo.MainActivity}: java.lang.SecurityException: getDeviceId: Neither user 10057 nor current process has android.permission.READ_PHONE_STATE.

在我的 android list 中:

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
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>
<service android:name=".MyService"/>
</application>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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.WRITE_EXTERNAL_STORAGE" />

最佳答案

MainActivity app = new MainActivity();

不要在扩展 Activity 的类上使用 new 运算符。在您的情况下,您正在初始化 imei,但您的 Activity 没有经历生命周期,因为您使用 new 来实例化它。如果可用,服务有可能访问 TelephonyManager。如果您需要在您的 Thread 中使用 imei,您可以在其构造函数中提供它。例如

public class Connection implements Runnable {

final String imei;
public Connection(String i) {
imei = i;
}

在您的ServiceonCreate 中,您可以检索imei(您也需要服务来完成它的生命周期)并实例化Runnable ,向构造函数提供 imei

关于Android:无法从线程获取 Imei,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35406649/

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