代码风格/正确的结构android

时间:2014-09-24 08:19:11

标签: android android-intent broadcastreceiver intentfilter

Hello其他程序员,

我找不到合适的方式来路由我的应用程序,我想要一个文件来决定必须启动哪个活动

我正在构建一个通常包含以下内容的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个活动是一个注册,一个是使用该应用程序。在这 setup我添加了一个额外的活动来检查令牌是否存在并路由到正确的活动。

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

我面临的问题是检查来电,它总是启动相同的活动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);
    }
}

1 个答案:

答案 0 :(得分: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" />

我希望这样可以正常工作。