最近公司需要做一个SDK,该SDK为其他的APP可以调用我们的APP,然后通过获取我们的APP获取用户信息,返回给他们一个唯一的授权码。
说白了就是弄一个第三方登陆功能,通过登陆我们的用户中心,给他们一个用户标识。
public static boolean checkApkExist(Context context, String packageName) {
if (packageName == null || "".equals(packageName)) {
return false;
}
try {
context.getPackageManager().getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}2.应用之间跳转(并且带参数):<span style="white-space:pre"> </span>ComponentName comp = new ComponentName("com.nbg.baby",
"com.nbg.baby.ApiLoginActivity");
Intent intent = new Intent();
intent.setComponent(comp);
intent.setAction(Intent.ACTION_VIEW);
Bundle bundle = new Bundle();
bundle.putString("extra", "extra.login");
intent.putExtras(bundle);
if(Utils.checkApkExist(MainActivity.this, "com.nbg.baby")){
startActivityForResult(intent, 1);
}else{
Toast.makeText(MainActivity.this, "应用未安装,无法跳转", Toast.LENGTH_SHORT).show();
}</span>A中接受B中返回数据: @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode ==1){
String result = data.getStringExtra("result");
Toast.makeText(this, result, Toast.LENGTH_SHORT).show();;
}
}
B中处理正常处理从A传过来数据即可。但是有一点要注意,B的ApiActivity属性,一定要设置:android:exported="true",否则会报错,权限被拒绝!public class YoYo {
private static YoYo sInstance;
private IUiListener listener;
private YoYo(String appId, Context context)
{
}
public static synchronized YoYo createInstance(String appId, Context context)
{
if(sInstance==null){
sInstance= new YoYo(appId, context);
}
return sInstance;
}
public void login(Activity context, IUiListener callBack)
{
ComponentName comp = new ComponentName("com.nbg.baby",
"com.nbg.baby.ApiLoginActivity");
Intent intent = new Intent();
intent.setComponent(comp);
intent.setAction(Intent.ACTION_VIEW);
Bundle bundle = new Bundle();
bundle.putString("extra", "我来自星星");
intent.putExtras(bundle);
context.startActivityForResult(intent, 1);
this.listener = callBack;
}
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode ==1){
if(resultCode == Activity.RESULT_CANCELED){
String result = data.getStringExtra("result");
UiError e = new UiError(0, "取消登陆", "用户取消");
this.listener.onError(e);
}else{
String result = data.getStringExtra("nickname");
JSONObject object = new JSONObject();
try {
object.put("昵称", result);
this.listener.onComplete(object);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return false;
}
}public interface IUiListener {
public abstract void onComplete(Object response);
public abstract void onError(UiError e);
public abstract void onCancel();
}原文:http://blog.csdn.net/yzhfd518/article/details/44621545