和风天气SDK
原理
- 集成和风天气
- 添加依赖
- 添加权限
- 在主线程进行动态权限申请
- 定义getWeather()方法
方法
//获取天气
public void getWeather() {
HeWeather.getWeatherNow(getActivity(), Lang.CHINESE_SIMPLIFIED, Unit.METRIC, new HeWeather.OnResultWeatherNowBeanListener() {
public static final String TAG = "he_feng_now";
@Override
public void onError(Throwable e) {
if (MOON >= 3 && MOON <= 5) {
layout.setBackgroundResource(R.drawable.spring);
search_weather = "春";
} else if (MOON >= 6 && MOON <= 8) {
layout.setBackgroundResource(R.drawable.summer);
search_weather = "夏";
} else if (MOON >= 9 && MOON <= 11) {
layout.setBackgroundResource(R.drawable.autumn);
search_weather = "秋";
} else {
layout.setBackgroundResource(R.drawable.winter);
search_weather = "冬";
}
Log.e(TAG, "onError: ", e);
System.out.println("Weather Now Error:" + new Gson());
}
@Override
public void onSuccess(Now dataObject) {
Log.e(TAG, " Weather Now onSuccess: " + new Gson().toJson(dataObject));
String jsonData = new Gson().toJson(dataObject);
String tianqi = null, wendu = null, tianqicode = null;
if (dataObject.getStatus().equals("ok")) {
String JsonNow = new Gson().toJson(dataObject.getNow());
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(JsonNow);
tianqi = jsonObject.getString("cond_txt");
Log.e("tinaqi", tianqi);
wendu = jsonObject.getString("tmp");
} catch (JSONException e) {
e.printStackTrace();
}
tv_tianqi.setText(tianqi);
if (tianqi.equals("晴")) {
layout.setBackgroundResource(R.drawable.sunny);
search_weather = "晴";
} else if (tianqi.contains("云")) {
layout.setBackgroundResource(R.drawable.duoyun);
search_weather = "云";
Log.e("weather_str",search_weather);
} else if (tianqi.equals("阴")) {
layout.setBackgroundResource(R.drawable.cloudy);
search_weather = "陰";
} else if (tianqi.contains("雪")) {
layout.setBackgroundResource(R.drawable.snow);
search_weather = "雪";
} else if (tianqi.contains("雨")) {
layout.setBackgroundResource(R.drawable.rain);
search_weather = "雨";
} else {
if (MOON >= 3 && MOON <= 5) {
layout.setBackgroundResource(R.drawable.spring);
search_weather = "春";
} else if (MOON >= 6 && MOON <= 8) {
layout.setBackgroundResource(R.drawable.summer);
search_weather = "夏";
} else if (MOON >= 9 && MOON <= 11) {
layout.setBackgroundResource(R.drawable.autumn);
search_weather = "秋";
} else {
layout.setBackgroundResource(R.drawable.winter);
search_weather = "冬";
}
}
} else {
Toast.makeText(getActivity(), "有错误", Toast.LENGTH_SHORT).show();
return;
}
}
});
}
每日诗词推荐
原理
- 通过Okhttp从后台获取gson数据
- 执行主线程
- 在主线程中初始化ListView
listView.setAdapter(myAdapter);
主线程执行
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
action();
}
});
诗词点击跳转
点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getActivity(), PoemDetail.class);
intent.putExtra("poem", rec.get(position));
startActivity(intent);
}
});
动态权限申请
权限申请
//定义boolean类型的权限申请结果变量
private boolean permission;
private PackageManager pm;
//在主线程中进行权限申请
pm = getActivity().getPackageManager();
permission = (
PackageManager.PERMISSION_GRANTED ==pm.checkPermission("android.permission.ACCESS_FINE_LOCATION",
"com.example.a15632.poetrydemo"));
//权限申请回调
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "Permission GET", Toast.LENGTH_SHORT).show();
Log.e("permission1",permission+"");
getWeather();
} else {
//Permission Denied
Toast.makeText(getActivity(), "Permission Denied", Toast.LENGTH_SHORT).show();
Log.e("permission1",permission+"");
}
}
查找功能实现
UI键盘搜索
android:imeOptions
属性:
actionGo
开始actionSend
发送actionSearch
搜索actionDone
完成
<EditText
android:id="@+id/et_home_input"
android:hint="搜索诗句、诗名、关键词"
android:imeOptions="actionSearch"
android:inputType="text"
android:background="@null"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="5"/>
//关于EditView的操作,相应虚拟键盘上的"搜索"按钮
input.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
search(v);
return true;
}
});
短信验证码服务SMSSDK
原理
- 集成SMSDK
- 用户同意
- 从短信自动获取
- 注册一个事件回调监听,用于处理SMSSDK接口请求的结果
- 自定义EventHandler,并通过Handler返回主线程
- 使用SMSSDK获取验证码
- 注销EventHandler
集成、使用代码
- 集成
// 在MobSDK的扩展中注册SMSSDK的相关信息
MobSDK {
appKey "2d0f808219f71"
appSecret "3fbace76120dd6d8b1027a591ef49002"
SMSSDK { "autoSMS true" }
}
保持登录状态
原理
- 使用SharedPreferences记录用户的信息
- SharedPreferences通过键值对的形式存储
- 当用户访问自身信息,自动查找SharedPreferences生成的程序内部文件中的信息