2011-08-24 52 views
12

Tôi đang cố gắng tạo ứng dụng cho READ PHONE STATE và khi trạng thái điện thoại được thay đổi để hiển thị Toast với trạng thái hiện tại. Nhưng khi tôi bắt đầu, ứng dụng dừng đột ngột.Android READ PHONE STATE?

lớp học của tôi:

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.widget.TextView; 

public class TelephonyDemo extends Activity { 
    TextView textOut; 
    TelephonyManager telephonyManager; 
    PhoneStateListener listener; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Get the UI 
     textOut = (TextView) findViewById(R.id.textOut); 

     // Get the telephony manager 
     telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 

     // Create a new PhoneStateListener 
     listener = new PhoneStateListener() { 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 
       String stateString = "N/A"; 
       switch (state) { 
       case TelephonyManager.CALL_STATE_IDLE: 
        stateString = "Idle"; 
        break; 
       case TelephonyManager.CALL_STATE_OFFHOOK: 
        stateString = "Off Hook"; 
        break; 
       case TelephonyManager.CALL_STATE_RINGING: 
        stateString = "Ringing"; 
        break; 
       } 
       textOut.append(String.format("\nonCallStateChanged: %s", 
         stateString)); 
      } 
     }; 

     // Register the listener with the telephony manager 
     telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 
} 

manifest của tôi là:

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

    <application 
     android:icon="@drawable/icon" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Light" > 
     <activity 
      android:name=".TelephonyDemo" 
      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> 

    <uses-sdk android:minSdkVersion="7" /> 

</manifest> 

bố trí của tôi là:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Telephony Demo" 
     android:textSize="22sp" /> 

    <TextView 
     android:id="@+id/textOut" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Output" > 
    </TextView> 

</LinearLayout> 
+0

Bạn sẽ cần phải đăng một số mã hoặc chi tiết hơn với những gì bạn đang cố gắng làm. Chúng tôi không ở đây để viết dự án của bạn cho bạn. – Codeman

+0

Có thể là một SecurityException được ném bởi vì bạn quên thêm quyền READ_PHONE_STATE trong tệp AndroidManifest.xml của bạn –

Trả lời

29

Tôi không thấy <uses-permission android:name="android.permission.READ_PHONE_STATE" /> trong tập tin Manifest của bạn.

Ứng dụng của bạn phải có khả năng đọc trạng thái đó.

+0

câu trả lời tuyệt vời! bạn có thể cho tôi biết làm thế nào tôi có thể làm cho ứng dụng của tôi chạy trong nền khi điện thoại bật? – AndBegginer

+1

Nếu ứng dụng của bạn chạy trong nền, bạn có thể sẵn sàng thực hiện Dịch vụ thay vì Hoạt động: http://developer.android.com/reference/android/app/Service.html - Tôi nói có thể là tôi không ' t có tất cả các yếu tố ngữ cảnh cần thiết để xác định điều này. – Shlublu

+2

Để bắt đầu bật nguồn điện thoại, hãy sử dụng bộ thu phát sóng BOOT_COMPLETED và bắt đầu dịch vụ của bạn từ đó. – marcinj

1

Ứng dụng của bạn biết nhờ ĐIỆN THOẠI NHÀ NƯỚC Intent được truyền phát bởi các điện thoại Dịch vụ thông báo cho ứng dụng về thay đổi PHONE STATE.
Bạn có thể cần đường dẫn để tạo ra ứng dụng của bạn

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

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

    <application 
     android:icon="@drawable/icon"`enter code here` 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Light" > 
     <activity 
      android:name=".TelephonyDemo" 
      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> 

    <uses-sdk android:minSdkVersion="7" /> 

</manifest> 
+5

Vui lòng thêm nhận xét vào mã này ... –

Các vấn đề liên quan