適合Android7.0以上(到9.0)系統,獲取 關於手機--狀態資訊 (如:MAC,IMEI,IMSI,ICCID)
阿新 • • 發佈:2018-12-21
這裡面也寫了獲取本機手機號碼的程式碼,但是測試之後發現只有華為nove3 才可以獲取到,不過其他一些重要的資訊都可以拿到,MAC,IMEI,IMSI,ICCID。
上程式碼吧
這是一些許可權
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
這裡Main2Activity是程式入口
------------------------ Main2Activity--------------------------
package com.example.earl.smalldemo; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class Main2Activity extends AppCompatActivity { private static final String TAG = "Main2Activity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Button button = findViewById(R.id.btn); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Main2Activity.this, MainActivity.class); startActivity(intent); finish(); } }); //8.0動態許可權 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int checkPermission = checkSelfPermission(Manifest.permission.READ_PHONE_STATE); if (checkPermission != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1); //後面的1為請求碼 Log.d(TAG, "未授權,去授權"); return; } else { Log.d(TAG, "已授權..."); } } else { Log.d(TAG, "版本<=8.0"); } } }
------------------------ MainActivity--------------------------
package com.example.earl.smalldemo; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; import android.widget.TextView; import java.net.NetworkInterface; import java.util.Collections; import java.util.List; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private static final String TODO = null; private TextView tv1; private TextView tv2; private TextView tv3; private TextView tv4; private TextView tv5; Context mcontext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mcontext = getApplicationContext(); tv1 = findViewById(R.id.tv1); tv2 = findViewById(R.id.tv2); tv3 = findViewById(R.id.tv3); tv4 = findViewById(R.id.tv4); tv5 = findViewById(R.id.tv5); showInformation(); } /** * 獲取到資訊並展示 */ public void showInformation() { //獲取Mac地址 String newMac = getNewMac(); tv1.setText("MAC: " + newMac); //獲取IMEI地址 String imei = getIMEI(mcontext); tv2.setText("IMEI: " + imei); //獲取MSISDN String msisdn = getMSISDN(mcontext); if (msisdn != null) { tv3.setText("手機號: " + msisdn); Log.d(TAG, "showInformation: 非空"); } else { Log.d(TAG, "showInformation: 空"); tv3.setText("手機號: " + "無法獲取手機號碼"); } //獲取IMSI String imsi = getIMSI(mcontext); tv4.setText("IMSI: " + imsi); //獲取ICCID String iccid = getICCID(mcontext); tv5.setText("ICCID: " + iccid); } /** * 通過網路介面取 * 獲取wifiMac地址 * * @return */ private static String getNewMac() { try { List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface nif : all) { if (!nif.getName().equalsIgnoreCase("wlan0")) continue; byte[] macBytes = nif.getHardwareAddress(); if (macBytes == null) { return null; } StringBuilder res1 = new StringBuilder(); for (byte b : macBytes) { res1.append(String.format("%02X:", b)); } if (res1.length() > 0) { res1.deleteCharAt(res1.length() - 1); } return res1.toString(); } } catch (Exception ex) { ex.printStackTrace(); } return null; } /** * 獲取手機IMEI號 */ public static String getIMEI(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { return TODO; } String imei = telephonyManager.getDeviceId(); return imei; } /** * 獲取手機號 */ public static String getMSISDN(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { return TODO; } String msisdn = telephonyManager.getLine1Number(); return msisdn; } /** * 獲取手機MSISDN號 */ public static String getIMSI(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { return TODO; } String imsi = telephonyManager.getSubscriberId(); return imsi; } /** * 獲取手機ICCID號 */ public static String getICCID(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { return TODO; } String iccid = telephonyManager.getSimSerialNumber(); return iccid; } @Override protected void onPause() { super.onPause(); //8.0動態許可權 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int checkPermission = checkSelfPermission(Manifest.permission.READ_PHONE_STATE); if (checkPermission != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1); //後面的1為請求碼 Log.d(TAG, "onpause(),未授權,去授權"); //展示資訊 showInformation(); return; } //展示資訊 showInformation(); Log.d(TAG, "onpause()已授權..."); } else { //展示資訊 showInformation(); Log.d(TAG, "onpause()版本<=6.0"); } } @Override protected void onDestroy() { super.onDestroy(); //8.0動態許可權 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int checkPermission = checkSelfPermission(Manifest.permission.READ_PHONE_STATE); if (checkPermission != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1); //後面的1為請求碼 Log.d(TAG, "ondestroy(),未授權,去授權"); //展示資訊 showInformation(); return; } //展示資訊 showInformation(); Log.d(TAG, "ondestroy(),已授權..."); } else { //展示資訊 showInformation(); Log.d(TAG, "ondestroy(),版本<=6.0"); } } }
佈局檔案
---------------------activity_main2.xml--------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main2Activity">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:layout_marginRight="60dp"
android:layout_gravity="center"
android:text="檢視手機狀態資訊"
android:textStyle="bold"
/>
</LinearLayout>
---------------------------- activity_main ---------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="10dp"
/>
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="10dp"
/>
<TextView
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="10dp"
/>
<TextView
android:id="@+id/tv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="10dp"
/>
<TextView
android:id="@+id/tv5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="10dp"
/>
</LinearLayout>