My App stops before requesting permissions

1

I have been doing an application in Android Studio which I only get the imei of the device when I press a button.

The problem I have is that when you start the application it stops and then asks for permission. after requesting permits works the way I want

attached code

public class MainActivity extends AppCompatActivity {

    TelephonyManager manager;
    TextView txtMensaje;
    private View btn;
    private final int REQUEST_ACCESS_PHONE = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtMensaje = findViewById(R.id.txtIMEI);
        btn = findViewById(R.id.btnSolicitar);
        manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        final String IMEI;

        if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_ACCESS_PHONE);
        }


        IMEI = manager.getDeviceId();


        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                txtMensaje.setText(IMEI);
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == REQUEST_ACCESS_PHONE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "permiso concedido", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "permiso Denegado", Toast.LENGTH_LONG).show();
            }

        }
    }
}

this is the error thrown by the catlog

10-15 14:19:16.400 742-15047/? E/WifiMonitor: handleEvent unknown: 14  CTRL-EVENT-SCAN-STARTED 

10-15 14:19:17.667 742-855/? E/WifiConfigStore: updateSavedNetworkHistory(): try "milita"WPA_PSK SSID="milita" milita [WPA2-PSK-CCMP][WPS][ESS] ajst=0

10-15 14:19:17.668 742-855/? E/WifiConfigStore:         got known scan result c0:05:c2:7e:85:69 key : "milita"WPA_PSK num: 1 rssi=-47 freq=2437

10-15 14:19:17.671 742-855/? E/WifiConfigStore:  writeKnownNetworkHistory() num networks:3 needWrite=false

10-15 14:19:17.671 742-855/? E/WifiStateMachine: mIsFullScanOngoing: false, mSendScanResultsBroadcast: false

10-15 14:19:17.967 742-742/? E/WifiTrafficPoller: TRAFFIC_STATS_POLL true Token 341 num clients 14

10-15 14:19:17.968 742-742/? E/WifiTrafficPoller:  packet count Tx=12877 Rx=13528
    
asked by Felipe Guerrero 15.10.2018 в 18:22
source

1 answer

1

something similar happened to me when I used TelephoneManager, so I looked for information and a solution which worked for me was to obtain the IMEI in this way:

String myIMEI = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);

Add the permissions to the manifest.xml

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

And I asked for the permissions in Android 6.0:

 int permissionCheck = ContextCompat.checkSelfPermission(
    this, Manifest.permission.READ_PHONE_STATE );

if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
    Log.i("Mensaje", "No se tiene permiso :( .");
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE }, 225);
} else {
    Log.i("Mensaje", "Se tiene permiso wiii!");
}
    
answered by 16.10.2018 в 14:14