安卓入门示例之在项目中接入第三方SDK
本示例将演示如下内容:
- 使用android studio创建新项目
- 接入国内某家云服务服务商ANDROID SDK
创建项目
在android studio中新建一个项目
Next, 然后选择Minimum SDK
然后一路Next, Finish
项目创建完成后,切换到project
接入SDK
首先下载SDK
解压下载的sdk
然后在android studio导入依赖的sdk module
然后用同样的方式导入IMLib
如果报错,可能会提示你需要安装android sdk 21,如下图所示
从下图可以看到,Error中提示要install的部分安装完成后,代码中红色的错误标记被移除了
在java目录下创建App.java文件
在App.java中引用sdk的RongIM库,此时编辑器中会出现红色标记,表示我们还未添加该sdk到项目依赖中
示例代码如下
package com.testproject;
import android.app.Application;
/**
* Created by yang on 2016/12/3.
*/
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
RongIM
}
}
打开app的module设置,并且添加依赖
添加IMKit和IMLib模块后,再次输入RongIM.i
,此时 Android Studio IDE会进行自动补全
按下回车键,IDE会自动在文件的开始处导入库 import io.rong.imkit.RongIM;
完整代码如下
package com.testproject;
import android.app.Application;
import io.rong.imkit.RongIM;
/**
* Created by yang on 2016/12/3.
*/
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
RongIM.init(this);
}
}
打开app\build.gradle
文件,也证实我们成功的添加了对IMKit和IMLib模块的依赖
在app的AndroidManifest中添加我们刚才创建的application name
动手写一个demo
首先下载一个sdk的demo
然后我们来仿造demo的配置,来动手写一个demo
在 IMLib 的 AndroidManifest 里配置好 App Key
我们从demo项目中将App Key拷贝过来
粘贴到TestProject的IMLib模块 的 AndroidManifest中
将demo项目中的权限配置拷贝过来
权限配置如下
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 获取机型信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<!-- 查看 Wi-Fi 状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 查看网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- 录音 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 控制振动器 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 防止设备休眠 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<!--获取联系人信息,demo中演示发送通讯录消息-->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
粘贴到我们的项目中
因为sealtalk这个项目比较复杂,我们选另一个比较简单的demo,作为我们的仿造对象,从这里下载或者直接从GITHUB下载
在 MainActivity 中调用RongIM.connect() 连接融云。注意此处的 Token 为一个测试 Token,你需要换成你自己的 Token,这个 Token 还需要与 RONG_CLOUD_APP_KEY 匹配。
我们从demo-app-android-quick-start项目里选一个token,作为用户token
我们将如下代码粘贴到 MainActivity.java
代码如下
String token = "d6bCQsXiupB/4OyGkh+TOrI6ZiT8q7s0UEaMPWY0lMxmHdi1v/AAJxOma4aYXyaivfPIJjNHdE+FMH9kV/Jrxg==";//test
RongIM.connect(token, new RongIMClient.ConnectCallback() {
/**
* Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的 Token
*/
@Override
public void onTokenIncorrect() {
Log.d("LoginActivity", "--onTokenIncorrect");
}
/**
* 连接融云成功
* @param userid 当前 token
*/
@Override
public void onSuccess(String userid) {
Log.d("LoginActivity", "--onSuccess" + userid);
}
/**
* 连接融云失败
* @param errorCode 错误码,可到官网 查看错误码对应的注释
*/
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
Log.d("LoginActivity", "--onError" + errorCode);
}
});
MainActivity.java
完整代码如下:
package com.testproject;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import io.rong.imkit.RongIM;
import io.rong.imlib.RongIMClient;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
String token = "d6bCQsXiupB/4OyGkh+TOrI6ZiT8q7s0UEaMPWY0lMxmHdi1v/AAJxOma4aYXyaivfPIJjNHdE+FMH9kV/Jrxg==";//test
RongIM.connect(token, new RongIMClient.ConnectCallback() {
/**
* Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的 Token
*/
@Override
public void onTokenIncorrect() {
Log.d("LoginActivity", "--onTokenIncorrect");
}
/**
* 连接融云成功
* @param userid 当前 token
*/
@Override
public void onSuccess(String userid) {
Log.d("LoginActivity", "--onSuccess" + userid);
}
/**
* 连接融云失败
* @param errorCode 错误码,可到官网 查看错误码对应的注释
*/
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
Log.d("LoginActivity", "--onError" + errorCode);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.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();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
同时我们将demo-app-android-quick-start项目里的 RONG_CLOUD_APP_KEY 替换我们之前写在 TestProject\IMLib\AndroidManifest.xml
里的KEY
运行 APP
选择在Genymotion模拟器中运行
如果APP能跑起来,模拟器将运行我们修改后的APP
在Android Monitor中搜索关键词 onSuccess
发现我们之前添加到TestProject\app\src\main\java\com\testproject\MainActivity.java
的代码已经被执行
SDK接入成功
参考资料: