2014-12-03 110 views
-1

我是新來的android開發,並試圖創建一個應用程序,我可以在來電屏幕上顯示來自通話記錄的用戶信息。我想在我使用烤麪包的屏幕上顯示信息,但這不是可點擊的。我想要點擊按鈕/圖像的東西。如果有人有任何想法,請提出建議。來電屏幕修改

類似http://i.imgur.com/MFhVyqB.jpg

這裏的東西是code`

public class IncomingCall extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    try { 
     TelephonyManager telMgr = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     PretextaPhoneListener phoneListener = new PretextaPhoneListener(
       context); 
     telMgr.listen(phoneListener, phoneListener.LISTEN_CALL_STATE); 
    } catch (Exception e) { 
     Log.e("error on receive", ""+ e); 
    } 
} 

private class PretextaPhoneListener extends PhoneStateListener { 
    Context mContext = null; 
    ActivityManager activityManager; 
     Intent i1; 
    public PretextaPhoneListener(Context context) { 
     super(); 
     mContext = context; 
     i1 = new Intent(context, TelephoneyWithoutToastActivity.class); 
      i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    } 

    public void onCallStateChanged(int state, String incomingNumber) { 
     // default implementation empty 
     Log.d("PretextaPhoneListener", state + " incoming no:" 
       + incomingNumber); 

     if (state == 1) { 
      int duration = 1500; 
      String msg=getContactIdFromNumber(incomingNumber); 
      Toast toast = Toast.makeText(mContext, msg, duration); 
      toast.show(); 
      ActivityManager localActivityManager = (ActivityManager) mContext.getSystemService("activity"); 
       for (String str = ((ActivityManager.RunningTaskInfo) localActivityManager.getRunningTasks(1).get(0)).topActivity.flattenToString();; str = ((ActivityManager.RunningTaskInfo) localActivityManager.getRunningTasks(1).get(0)).topActivity.flattenToString()) { 
        if ((!str.contains("com.android.phone.InCallScreen"))) 
         continue; 
        Log.d("IncomingCallPlus", "*****************************************************"); 
        mContext.startActivity(i1); 
        return; 
       }  
     } 
    } 

    private String getContactIdFromNumber(String contactNumber) { 
     StringBuilder callLogInfo=new StringBuilder(); 
     Cursor cursor = mContext.getContentResolver().query(
       CallLog.Calls.CONTENT_URI, 
       new String[] { CallLog.Calls.DATE, CallLog.Calls.DURATION, 
         CallLog.Calls.NUMBER, CallLog.Calls._ID , CallLog.Calls.TYPE}, 
         CallLog.Calls.NUMBER + "=?", new String[] { contactNumber}, 
         CallLog.Calls.DATE + " desc"); 

     int number = cursor.getColumnIndex(CallLog.Calls.NUMBER); 
     int type = cursor.getColumnIndex(CallLog.Calls.TYPE); 
     int date = cursor.getColumnIndex(CallLog.Calls.DATE); 
     int duration = cursor.getColumnIndex(CallLog.Calls.DURATION); 
     int missedCall =0; 
     int incomingCall =0; 
     int outgoingCall =0; 
     while (cursor.moveToNext()) { 
      String phNumber = cursor.getString(number); 
       String callType = cursor.getString(type); 
       String callDate = cursor.getString(date); 
       Date callDayTime = new Date(Long.valueOf(callDate)); 
       String callDuration = cursor.getString(duration); 
       String dir = null; 

       int dircode = Integer.parseInt(callType); 
       switch (dircode) { 
       case CallLog.Calls.OUTGOING_TYPE: 
        dir = "OUTGOING"; 
        outgoingCall ++; 
        break; 
       case CallLog.Calls.INCOMING_TYPE: 
        dir = "INCOMING"; 
        incomingCall++; 
        break; 

       case CallLog.Calls.MISSED_TYPE: 
        dir = "MISSED"; 
        missedCall++; 
        break; 
       } 

       Log.i("dir", dir); 
      } 
      if(missedCall>0){ 
       callLogInfo.append(missedCall + " missed Calls"); 
      } 

      if(outgoingCall>0){ 
       callLogInfo.append(outgoingCall + " outgoing Call"); 
      } 
      if(incomingCall>0){ 
       callLogInfo.append(incomingCall + " incoming Calls"); 
      } 
      cursor.close(); 
     // addInvitePopup(contactNumber,mContext); 
     return callLogInfo.toString(); 
    } 
    } 
} 



        manifest 

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

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="21" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.READ_CALL_LOG"/> 
<uses-permission android:name="android.permission.READ_CONTACTS"/> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
<uses-permission android:name="android.permission.GET_TASKS"/> 

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

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

    <receiver android:name="com.collabra.pretexta.service.IncomingCall"> 
      <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
    </receiver> 
</application> 

</manifest> 


MainActivity.java 


    public class MainActivity extends Activity { 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, 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); 
} 
} 

`

+0

我擡頭看了很多帖子,但沒有一篇很清楚。如果有人有任何想法,請幫助? – 2014-12-04 03:35:50

回答

0

我已經找到了解決辦法,我創建了一個活動具有透明背景

在此之後,我有一個按鈕在我的英寸上電話屏幕肯定有一些問題,我正在努力。