gpt4 book ai didi

Android C2DM - 找不到处理启动服务 Intent 的最佳方法?

转载 作者:太空狗 更新时间:2023-10-29 13:38:30 24 4
gpt4 key购买 nike

我正在寻找通过处理找不到外部包的可能性来通知用户他们需要安装包的最佳方式。

在这种特殊情况下,我希望实现TODO: if intent not found, notification on need to have GSF in the C2DMMessaging class

public static void register(Context context,
String senderId) {
Intent registrationIntent = new Intent(REQUEST_REGISTRATION_INTENT);
registrationIntent.setPackage(GSF_PACKAGE);
registrationIntent.putExtra(EXTRA_APPLICATION_PENDING_INTENT,
PendingIntent.getBroadcast(context, 0, new Intent(), 0));
registrationIntent.putExtra(EXTRA_SENDER, senderId);
context.startService(registrationIntent);
// TODO: if intent not found, notification on need to have GSF

}

我在想我应该寻找错误 W/ActivityManager( 60): Unable to start service Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android .gsf(有附加功能)}:未找到

但是如何捕获该错误呢?

更新 - 刚刚发现调用 startService 会返回一个 ComponentName 实例,如果服务启动失败则该实例为空,所以我的代码现在看起来像这样

ComponentName name = context.startService(registrationIntent);
// TODO: if intent not found, notification on need to have GSF
if(name == null){
Util.log_debug_message("@@@@ REG INTENT FAILED");
}else{
Util.log_debug_message("@@@@ REG INTENT SUCCEEDED");
}

(对于寻找此解决方案的任何人来说,Util.log_debug 只是我在 util 类中创建的一个调用 Log.d 的函数,因此只需将其替换为对 Log.d 的调用即可)

这似乎工作得很好,所以我想我需要发送一个带有额外信息的广播消息来指示需要安装包。接收器然后可以显示一个警告对话框,说明用户必须安装!

用户需要安装什么?以及用户将如何安装需要安装的任何东西?

提前感谢您提供任何提示、指针代码 fragment 和帮助

最佳答案

我已经解决了这个问题 - 在调用 C2DM 注册事件的 Activity 中我有这段代码

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
register();
}

protected void register() {
String reg_id = C2DMessaging.getRegistrationId(this);
String email = Util.getEmail(this);
if(reg_id == null || reg_id == ""){
Util.log_debug_message("@@@@ Registering with C2DM");
Toast.makeText(this, "Registering with C2DM", Toast.LENGTH_LONG).show();
if(C2DMessaging.register(this, Config.C2DM_SENDER)){
showLoadingDialog();
}else{
showInstallGSFDialog();
}
}else if(email == null || email =="-1"){
Util.log_debug_message("**** Updating server with new auth token");
register_with_server();
}
}

private void showInstallGSFDialog(){
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("ERROR!");
alertDialog.setMessage("Please ensure you have a valid GMail account set up on your phone." +
" This application needs to use Google's C2DM service");
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {

return;

} });
alertDialog.show();
}

我将 C2DMessaging.register 更改为 bool 方法并添加了检查以确保服务像这样启动...

/**
* Initiate c2d messaging registration for the current application
*/
public static boolean register(Context context, String senderId) {
boolean res = false;
Intent registrationIntent = new Intent(REQUEST_REGISTRATION_INTENT);
registrationIntent.setPackage(GSF_PACKAGE);
registrationIntent.putExtra(EXTRA_APPLICATION_PENDING_INTENT,
PendingIntent.getBroadcast(context, 0, new Intent(), 0));
registrationIntent.putExtra(EXTRA_SENDER, senderId);
ComponentName name = context.startService(registrationIntent);
// if intent not found, notification on need to have GSF by NOT setting resukt of this function to true
if(name == null){
Util.log_debug_message("@@@@ REG INTENT FAILED");
}else{
Util.log_debug_message("@@@@ REG INTENT SUCCEEDED");
res = true;
}
return res;
}

关于Android C2DM - 找不到处理启动服务 Intent 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8395583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com