Android–基于PUSH服务的位置共享软件的实现(宝贝去哪儿)
开发软件的目的很单纯:如果想知道Ta的位置,你不用主动询问,打开手机软件,即可查看到对方的实时位置。
软件的早期版本没有使用PUSH服务,而是通过动态算法轮询的方式进行位置数据提交,比较耗费电量和流量。软件最新版本下载地址:http://touchyouimage.u.qiniudn.com/TouchYou.apkhttp://dl.yanming8.cn/TouchYou.apk在新版的软件中加入了PUSH服务,在手机开机完成后会自动启动一个后台的PUSH服务,建立与PUSH服务器的长连接,以便收取到推送的消息。PUSH服务使用的是JPUSH提供的免费服务。在Android工程中添加JPUSH支持:1、导入 SDK 开发包到你自己的应用程序项目
- 解压缩 jpush-sdk_v1.x.y.zip 集成压缩包
- 复制 libs/jpush-sdk-release1.x.y.jar 到工程 libs/ 目录下
复制 libs/armeabi/libjpush.so 到工程 libs/armeabi 目录下
如果您的项目有 libs/armeabi-v7a 这个目录,请把 libjpush.so 也复制一份到这个目录。
2、配置 AndroidManifest.xml
根据 SDK 压缩包里的 AndroidManifest.xml 样例文件,来配置应用程序项目的 AndroidManifest.xml 。
主要步骤为:
- 复制备注为 “Required” 的部分
- 将备注为替换包名的部分,替换为当前应用程序的包名
将AppKey替换为在Portal上注册该应用的的Key,例如(9fed5bcb7b9b87413678c407)
01
xml
version
=
1.0
encoding
=
utf-8
?>
02
<
manifest
xmlns:android
=
http://schemas.android.com/apk/res/android
03
package
=
Your Package
04
android:versionCode
=
100
05
android:versionName
=
1.0.0
06
>
07
08
09
<
permission
android:name
=
Your Package.permission.JPUSH_MESSAGE
android:protectionLevel
=
signature
/>
10
11
12
<
uses-permission
android:name
=
You Package.permission.JPUSH_MESSAGE
/>
13
<
uses-permission
android:name
=
android.permission.RECEIVE_USER_PRESENT
/>
14
<
uses-permission
android:name
=
android.permission.INTERNET
/>
15
<
uses-permission
android:name
=
android.permission.WAKE_LOCK
/>
16
<
uses-permission
android:name
=
android.permission.READ_PHONE_STATE
/>
17
<
uses-permission
android:name
=
android.permission.WRITE_EXTERNAL_STORAGE
/>
18
<
uses-permission
android:name
=
android.permission.READ_EXTERNAL_STORAGE
/>
19
<
uses-permission
android:name
=
android.permission.VIBRATE
/>
20
<
uses-permission
android:name
=
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
/>
21
<
uses-permission
android:name
=
android.permission.ACCESS_NETWORK_STATE
/>
22
23
24
<
uses-permission
android:name
=
android.permission.ACCESS_COARSE_LOCATION
/>
25
<
uses-permission
android:name
=
android.permission.ACCESS_COARSE_UPDATES
/>
26
<
uses-permission
android:name
=
android.permission.ACCESS_WIFI_STATE
/>
27
<
uses-permission
android:name
=
android.permission.CHANGE_WIFI_STATE
/>
28
<
uses-permission
android:name
=
android.permission.ACCESS_FINE_LOCATION
/>
29
<
uses-permission
android:name
=
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
/>
30
<
uses-permission
android:name
=
android.permission.CHANGE_NETWORK_STATE
/>
31
32
<
application
33
android:icon
=
@drawable/ic_launcher
34
android:label
=
@string/app_name
35
android:name
=
Your Application
>
36
37
38
<
service
39
android:name
=
cn.jpush.android.service.PushService
40
android:enabled
=
true
41
android:exported
=
false
>
42
<
intent-filter
>
43
<
action
android:name
=
cn.jpush.android.intent.REGISTER
/>
44
<
action
android:name
=
cn.jpush.android.intent.REPORT
/>
45
<
action
android:name
=
cn.jpush.android.intent.PushService
/>
46
<
action
android:name
=
cn.jpush.android.intent.PUSH_TIME
/>
47
intent-filter
>
48
service
>
49
50
51
<
receiver
52
android:name
=
cn.jpush.android.service.PushReceiver
53
android:enabled
=
true
>
54
<
intent-filter
android:priority
=
1000
>
55
<
action
android:name
=
cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY
/>
56
<
category
android:name
=
Your Package
/>
57
intent-filter
>
58
<
intent-filter
>
59
<
action
android:name
=
android.intent.action.USER_PRESENT
/>
60
<
action
android:name
=
android.net.conn.CONNECTIVITY_CHANGE
/>
61
intent-filter
>
62
<
intent-filter
>
63
<
action
android:name
=
android.intent.action.PACKAGE_ADDED
/>
64
<
action
android:name
=
android.intent.action.PACKAGE_REMOVED
/>
65
<
data
android:scheme
=
package
/>
66
intent-filter
>
67
receiver
>
68
69
<
activity
70
android:name
=
cn.jpush.android.ui.PushActivity
71
android:theme
=
@android:style/Theme.Translucent.NoTitleBar
72
android:configChanges
=
orientation|keyboardHidden
>
73
<
intent-filter
>
74
<
action
android:name
=
cn.jpush.android.ui.PushActivity
/>
75
<
category
android:name
=
android.intent.category.DEFAULT
/>
76
<
category
android:name
=
Your Package
/>
77
intent-filter
>
78
activity
>
79
80
<
service
81
android:name
=
cn.jpush.android.service.DownloadService
82
android:enabled
=
true
83
android:exported
=
false
>
84
service
>
85
86
<
receiver
android:name
=
cn.jpush.android.service.AlarmReceiver
/>
87
88
89
90
91
92
93
94
<
meta-data
android:name
=
JPUSH_CHANNEL
android:value
=
developer-default
/>
95
96
<
meta-data
android:name
=
JPUSH_APPKEY
android:value
=
Your AppKey
/>
97
application
>
98
manifest
>
然后在Android工程中添加BroadcastReciever类,用来接收系统的广播,在系统期待完成后发送一个启动完成的广播,在收到这个广播消息后启动PUSH服务,然后对用户名进行MD5加密后设在alias,用于对该用户的唯一标识:
01
Log.d(TAG,
Starting Push Service
);
02
JPushInterface.init(context);
03
Log.d(TAG,
Push Service Started
);
04
05
String email = sharedPreferences.getString(
EMAIL
,
null
);
06
Log.d(TAG,
Set your device Alias to :
+email);
07
08
//如果没有记录到用户的用户名则不设置
09
if
(email !=
null
)
10
JPushInterface.setAliasAndTags(context, Utils.MD5(email),
null
);
当用于需要查看对方的位置信息的时候,打开本软件后会通过ASYNC任务向软件服务器发送一个Web Service请求:
01
public
class
ChangeTaStateTask
extends
AsyncTask
{ 02
@Override
03
protected
Boolean doInBackground(String... params) {
04
05
SoapObject changestate_soap =
new
SoapObject(NAMESPACE, CHANGE_TA_STATE_AND_RETURN);
06
07
/*
08
* params[0] is the email
09
*
10
* params[1] is the state:
11
* 0:not be focused
12
* 1:be focused
13
*/
14
changestate_soap.addProperty(
arg0
,params[
0
]);
15
changestate_soap.addProperty(
arg1
,params[
1
]);
16
17
Log.d(TAG,
Send a request to your friend to open position service
);
18
19
//鐢熸垚璋冪敤Web service鏂规硶鐨凷OAP璇锋眰淇℃伅
20
SoapSerializationEnvelope envelope =
new
SoapSerializationEnvelope(SoapEnvelope.VER11);
21
envelope.bodyOut = changestate_soap;
22
envelope.dotNet =
false
;
23
24
HttpTransportSE ht =
new
HttpTransportSE(URL);
25
26
try
{
27
ht.call(NAMESPACE + CHANGE_TA_STATE_AND_RETURN, envelope);
28
}
catch
(IOException e) {
29
// TODO Auto-generated catch block
30
e.printStackTrace();
31
}
catch
(XmlPullParserException e) {
32
// TODO Auto-generated catch block
33
e.printStackTrace();
34
}
35
36
return
true
;
37
}
38
}
点击下载:jpush-api-v2.zip。
在你的项目里引入 jpush-java-libraryV2.jar 以及lib文件夹里的第三方依赖包(gson.jar)。
服务器接收到该请求会向对方通过唯一标识的别名发送一个PUSH消息:
01
if
(email ==
null
|| on_off ==
null
)
02
return
ER
;
03
04
jpush = getJpushClient();
05
06
MessageResult msgResult = jpush.sendCustomMessageWithAlias(getRandomSendNo(),Utils.MD5(ta_email), email, on_off);
07
08
if
(
null
!= msgResult) {
09
logger.info(
JPUSH return data:
+ msgResult.toString());
10
if
(msgResult.getErrcode() == ErrorCodeEnum.NOERROR.value()) {
11
logger.info(String.format(
send message successfully锛?sendNo= %s,messageId= %s
,msgResult.getSendno(),msgResult.getMsg_id()));
12
return
OK
;
13
}
else
{
14
logger.error(
send message failed锛?error code=
+ msgResult.getErrcode() +
, error message=
+ msgResult.getErrmsg());
15
return
ER
;
16
}
17
}
else
{
18
logger.error(
鏃犳硶鑾峰彇鏁版嵁
);
19
return
ER
;
20
}
=-=-=-=-=
Powered by Blogilo
>更多相关文章
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 04-21中国产品数字护照体系加速建设
- 04-21上海口岸汽车出口突破50万辆
- 04-21外媒:微软囤货GPU以发展AI
- 04-21苹果手表MicroLED项目停滞持续波及供应链
- 04-21三部门:到2024年末IPv6活跃用户数达到8亿
相关文章
24小时热门资讯
24小时回复排行
热门推荐
最新资讯
操作系统
黑客防御