解析,内部类和电话听众

时间:2014-07-18 21:30:32

标签: java android parse-platform telephonymanager phone-state-listener

我的android应用程序中有一个非常具体和尴尬的问题。这只是我的服务类中的onStartCommand方法,在运行时应该创建一个电话状态监听器。因此,每次用户接听电话时,我都希望将该号码发送到Parse中的数据库。问题是我认为在内部类和Parse方面存在冲突。没有任何东西被推送到服务器。我是Android和Parse的新手,所以让我知道我是否遗漏了一些明显的东西,或者是否有解决方法。 感谢

public int onStartCommand(Intent e, int flags, int startId) {

    TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

    class TeleListener extends PhoneStateListener {

        public void onCallStateChanged(int state, String incomingNumber) {

            super.onCallStateChanged(state, incomingNumber);

            Parse.initialize(ParseService.this,
                    "still a secret",
                    "no no no");
            PushService.setDefaultPushCallback(ParseService.this,
                    Main.class);

            TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

            String userNumber = (String) TelephonyMgr.getLine1Number();
            switch (state) {
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // OFFHOOK

                ParseObject Users = new ParseObject("UserCalls");
                Users.put("CallsReceived", incomingNumber);
                Users.put("UserNumber", userNumber);
                Users.saveInBackground();

                Toast.makeText(getApplicationContext(), "Offhook",
                        Toast.LENGTH_SHORT).show();

            }

        }


    }

    TelephonyMgr.listen(new TeleListener(),
            PhoneStateListener.LISTEN_CALL_STATE);

    Toast.makeText(this, "Service has Started", Toast.LENGTH_SHORT).show();
    return START_STICKY;
}

1 个答案:

答案 0 :(得分:0)

您正在使用用户自定义对象的字段(列)的非法名称。列名称只能包含字母数字或下划线字符,并且必须以字母开头。所以尝试类似的事情:

ParseObject Users = new ParseObject("Users");
Users.put("User_ID", userNumber);
String callMade = (String) incomingNumber;
Users.put("Calls_Made", callMade);
Users.saveInBackground();

目前还不清楚是否要使用内置的“User”类。如果您这样做,则必须先将该用户注册或登录,然后再将数据保存到对象。您还需要引用它:

ParseUser user = ParseUser.getCurrentUser();