2014-09-24 94 views
1

你好老乡程序员,代码风格/结构正确的Android

我不能找到一种合适的方式来路由我的申请,我想一个文件来决定哪些活动必须启动

我建立一个机器人应用程序一般包含:

-2的方式来启动

-3活动的

应用程序可以被鎏通过点击图标(标准推出)

<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 

和活动当有来电

<action android:name="android.intent.action.PHONE_STATE" /> 

在第一个安装有2活动的一个注册,一个使用开始nched应用。在这个 安装程序中,我添加了一个额外的活动来检查令牌是否存在并且路由到正确的活动。

在我现在的设置中,所有操作都在广播接收器中。我试图实现额外活动的逻辑。

我现在面临的问题是来电的检查,它总是推出相同的活动CallHandler,

我觉得路由广播接收机中的应用可能是不好的做法,但我不能找到一个更好的路由应用程序的方式,并且当前的代码不起作用。

你的帮助是非常感谢,下面的代码片段可能有助于解释我的问题:

清单:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.CALL_PHONE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.READ_PROFILE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <receiver android:name=".RoutingCallReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 

     </intent-filter> 
    </receiver> 
    <activity 
     android:name=".RegisterActivity" 
     android:label="@string/app_name" 
     android:windowSoftInputMode="adjustResize|stateVisible" > 
    </activity> 
    <activity 
     android:name=".CallHandler" 
     android:label="@string/title_activity_main" > 


    </activity> 
    <activity 
     android:name=".CreateCallActivity" 
     android:label="@string/title_activity_create_call" > 
    </activity> 
</application> 

RoutingCallReceiver:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 

public class RoutingCallReceiver extends BroadcastReceiver { 
    TelephonyManager telephony; 
    Intent in; 
    public void onReceive(Context context, Intent intent) { 
     PrimePhoneStateListener phoneListener = new PrimePhoneStateListener(); 
     telephony = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 

     if(telephony.getCallState()== 1){ 
      in = new Intent(context, CallHandler.class); 
      in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(in); 
     } 
     else { 
      TokenIO tokenHandler = new TokenIO(); 
      String token = tokenHandler.getToken(context); 
      Log.d("AAfter", "Token"); 
      if(token.equals("") || token.equals(null)){ 
       in = new Intent(context, RegisterActivity.class); 

       in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(in); 
      } 
      else{ 
       in = new Intent(context, CreateCallActivity.class); 

       in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(in); 
      } 

     } 
    } 


    // when finish your job, stop listen to changes 
    public void onDestroy() { 
     telephony.listen(null, PhoneStateListener.LISTEN_NONE); 
    } 
} 
+0

你是什么意思“当前代码不起作用”? 'if(token.equals(“”)|| token.equals(null))'中的条件从来就不是真的? – 2014-09-24 08:44:21

+0

如前所述,CallHandler活动始终开始,所以问题出在 'if(telephony.getCallState()== 1)' – 2014-09-24 08:53:39

+0

如果您有来电铃声,那正是它的样子。 – 2014-09-24 09:01:46

回答

1

你可以改变你的XML文件

 <?xml version="1.0" encoding="utf-8"?> 

     <uses-permission android:name="android.permission.CALL_PHONE" /> 
     <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
     <uses-permission android:name="android.permission.INTERNET" /> 
     <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
     <uses-permission android:name="android.permission.READ_PROFILE" /> 
     <uses-permission android:name="android.permission.READ_CONTACTS" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <receiver android:name=".RoutingCallReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 

     </intent-filter> 
    </receiver> 
    <activity 
     android:name=".RegisterActivity" 
     android:label="@string/app_name" 
     android:windowSoftInputMode="adjustResize|stateVisible" > 
    </activity> 
    <activity 
     android:name=".CallHandler" 
     android:label="@string/title_activity_main" > 


    </activity> 
    <activity 
     android:name=".CreateCallActivity" 
     android:label="@string/title_activity_create_call" > 
    </activity> 
</application> 

,并把这个标签为主要活动

 <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 

,我希望将正常工作。

+0

你是建议我应该回到我的第一个设置,只是为了检查启动活动? 我试图找到答案的一个大问题是否有其他方式,或者您提供的解决方案是否是唯一的方式 感谢您的时间和精力 – 2014-09-24 09:03:18

+0

是的,这是解决方案,我知道 – DreamCoder 2014-09-24 09:09:52

+0

您可以检查在OnRecive广播reciver中启动哪个活动 – DreamCoder 2014-09-24 09:10:55