Приложение Eclipse для Android — приложение неожиданно остановилось. Попробуйте еще раз

#android #eclipse

#Android #eclipse

Вопрос:

У меня проблема с моим приложением для Android (служба TelephonyManager). Когда я запускаю приложение с кодом без геттеров, оно работает, но если я использую функцию get (), приложение отправляет мне сообщение «Приложение неожиданно остановилось. Пожалуйста, попробуйте еще раз «. Я действительно не знаю, что не так.

Мой «плохой» код:

 package com.example.tc;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.telephony.TelephonyManager;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.os.Build;

public class TC1 extends ActionBarActivity {

TextView textView1;

@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tc1);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    textView1=(TextView)findViewById(R.id.textView1);  

    //Get the instance of TelephonyManager  
    TelephonyManager  tm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);  




    //Calling the methods of TelephonyManager the returns the information 
    //If I remove this code app works 
    String IMEINumber=tm.getDeviceId();  



}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.tc1, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_tc1, container,
                false);
        return rootView;
    }
}
 

}

Layout.activity_tc1.xml:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.tc.TC1"
tools:ignore="MergeRootFrame" />
 

Макет.fragment_tc1.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.tc.TC1$PlaceholderFragment" >

    <TextView
        android:id="@ id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Phone Details:" />

    <EditText
        android:id="@ id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@ id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="68dp"
        android:ems="10"
        android:text="aaaa" >

        <requestFocus />
    </EditText>

</RelativeLayout>
 

AndroidManifest.xml:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tc"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.tc.TC1"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
 

Комментарии:

1. журнал ошибок <————->

Ответ №1:

В официальной документации для getDeviceID говорится

 Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones. Return null if device ID is not available. 

**Requires Permission: READ_PHONE_STATE**
 

Вы не дали этого READ_PHONE_STATE разрешения в своем файле манифеста.

Ответ №2:

ДОБАВЬТЕ РАЗРЕШЕНИЕ В ФАЙЛ МАНИФЕСТА

 TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
// get IMEI
String imei = tm.getDeviceId();
//get The Phone Number
String phone = tm.getLine1Number();
 

Манифест

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