gpt4 book ai didi

Android GCM 应用程序在我的 Android 应用程序中的 GCMRegistrar.checkManifest(this) 行强制关闭,出现未知错误

转载 作者:行者123 更新时间:2023-11-29 17:48:14 26 4
gpt4 key购买 nike

我正在尝试使用 gcm 为我的 android 应用程序创建推送通知服务。我在我的项目中遇到以下错误:

// Make sure the manifest permissions was properly set 
GCMRegistrar.checkManifest(this);

应用程序在此行强制关闭。我将在 logcat 中显示日志:

07-23 12:53:47.619: D/AndroidRuntime(15575): Shutting down VM
07-23 12:53:47.619: W/dalvikvm(15575): threadid=1: thread exiting with uncaught exception (group=0x4163fc20)
07-23 12:53:47.679: E/AndroidRuntime(15575): FATAL EXCEPTION: main
07-23 12:53:47.679: E/AndroidRuntime(15575): Process: com.tonyjoseph.kra, PID: 15575
07-23 12:53:47.679: E/AndroidRuntime(15575): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tonyjoseph.kra/com.tonyjoseph.kra.MainActivity}: java.lang.IllegalStateException: No receiver for package com.tonyjoseph.kra
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.app.ActivityThread.access$800(ActivityThread.java:145)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.os.Handler.dispatchMessage(Handler.java:102)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.os.Looper.loop(Looper.java:136)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.app.ActivityThread.main(ActivityThread.java:5177)
07-23 12:53:47.679: E/AndroidRuntime(15575): at java.lang.reflect.Method.invokeNative(Native Method)
07-23 12:53:47.679: E/AndroidRuntime(15575): at java.lang.reflect.Method.invoke(Method.java:515)
07-23 12:53:47.679: E/AndroidRuntime(15575): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
07-23 12:53:47.679: E/AndroidRuntime(15575): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
07-23 12:53:47.679: E/AndroidRuntime(15575): at dalvik.system.NativeStart.main(Native Method)
07-23 12:53:47.679: E/AndroidRuntime(15575): Caused by: java.lang.IllegalStateException: No receiver for package com.tonyjoseph.kra
07-23 12:53:47.679: E/AndroidRuntime(15575): at com.google.android.gcm.GCMRegistrar.checkManifest(GCMRegistrar.java:151)
07-23 12:53:47.679: E/AndroidRuntime(15575): at com.tonyjoseph.kra.MainActivity.onCreate(MainActivity.java:54)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.app.Activity.performCreate(Activity.java:5231)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-23 12:53:47.679: E/AndroidRuntime(15575): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
07-23 12:53:47.679: E/AndroidRuntime(15575): ... 11 more
07-23 12:53:49.379: I/Process(15575): Sending signal. PID: 15575 SIG: 9

上面的日志是我的app在logcat中的 Activity 日志。发生在我身上的一件奇怪的事情是,当我运行我的应用程序时,另一条消息也开始在 logcat 中显示为另一个保存的过滤器。它在 logcat 中的名称是这样的:com.google.android.gms (Session Filter)。我不知道它是否与我的应用程序有关。但我正在展示这个,因为它可能有助于清除错误。我还将显示该日志:

 07-23 11:12:42.999: W/ContextImpl(13335): Implicit intents with startService are not safe: Intent { act=com.google.android.gms.analytics.service.START } android.content.ContextWrapper.startService:494 com.google.android.gms.analytics.service.AnalyticsService.onCreate:165 android.app.ActivityThread.handleCreateService:2592 
07-23 11:13:05.509: W/GA-SERVICE(13335): Thread[Thread-237,5,main]: Using destination https://ssl.google-analytics.com/collect
07-23 11:15:05.809: W/ActivityThread(13335): ClassLoader.loadClass: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
07-23 11:41:39.409: W/ContextImpl(13335): Implicit intents with startService are not safe: Intent { act=com.google.android.gms.analytics.service.START } android.content.ContextWrapper.startService:494 com.google.android.gms.analytics.service.AnalyticsService.onCreate:165 android.app.ActivityThread.handleCreateService:2592
07-23 11:41:39.469: W/GA-SERVICE(13335): Thread[Thread-238,5,main]: Using destination https://ssl.google-analytics.com/collect
07-23 12:50:09.119: D/SystemBroadcastService(13335): Received broadcast action=android.intent.action.PACKAGE_REMOVED and uri=
07-23 12:50:09.709: W/ContextImpl(13335): Implicit intents with startService are not safe: Intent { act=com.google.android.gms.games.service.INTENT } android.content.ContextWrapper.startService:494 com.google.android.gms.games.service.GamesIntentService.a:101 com.google.android.gms.games.service.GamesIntentService.c:373
07-23 12:50:09.759: W/ContextImpl(13335): Implicit intents with startService are not safe: Intent { act=com.google.android.gms.appstate.service.INTENT } android.content.ContextWrapper.startService:494 com.google.android.gms.appstate.service.AppStateIntentService.a:58 com.google.android.gms.appstate.service.AppStateIntentService.a:104
07-23 12:50:11.339: W/dalvikvm(13335): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/google/android/gms/icing/impl/NativeIndex;
07-23 12:50:11.489: E/Icing(13335): Error linking native code, bailing from initialization
07-23 12:50:11.489: E/Icing(13335): java.lang.UnsatisfiedLinkError: Couldn't load AppDataSearch from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/com.android.location.provider.jar", zip file "/system/priv-app/PrebuiltGmsCore.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]]: findLibrary returned null
07-23 12:50:11.489: E/Icing(13335): at java.lang.Runtime.loadLibrary(Runtime.java:358)
07-23 12:50:11.489: E/Icing(13335): at java.lang.System.loadLibrary(System.java:526)
07-23 12:50:11.489: E/Icing(13335): at com.google.android.gms.icing.impl.NativeIndex.<clinit>(SourceFile:497)
07-23 12:50:11.489: E/Icing(13335): at cgf.a(SourceFile:158)
07-23 12:50:11.489: E/Icing(13335): at cgv.a(SourceFile:524)
07-23 12:50:11.489: E/Icing(13335): at chg.run(SourceFile:287)
07-23 12:50:11.489: E/Icing(13335): at android.os.Handler.handleCallback(Handler.java:733)
07-23 12:50:11.489: E/Icing(13335): at android.os.Handler.dispatchMessage(Handler.java:95)
07-23 12:50:11.489: E/Icing(13335): at android.os.Looper.loop(Looper.java:136)
07-23 12:50:11.489: E/Icing(13335): at cft.run(SourceFile:38)
07-23 12:50:11.489: E/Icing(13335): Internal init failed
07-23 12:50:11.489: E/Icing(13335): Couldn't handle android.intent.action.PACKAGE_REMOVED intent due to initialization failure.
07-23 12:50:12.099: I/PeopleDatabaseHelper(13335): cleanUpNonGplusAccounts done.
07-23 12:51:52.229: W/ContextImpl(13335): Implicit intents with startService are not safe: Intent { act=com.google.android.gms.analytics.service.START } android.content.ContextWrapper.startService:494 com.google.android.gms.analytics.service.AnalyticsService.onCreate:165 android.app.ActivityThread.handleCreateService:2592
07-23 12:51:53.089: W/GA-SERVICE(13335): Thread[Thread-315,5,main]: Using destination https://ssl.google-analytics.com/collect
07-23 12:51:56.749: W/GA-SERVICE(13335): Thread[Thread-315,5,main]: Using destination https://ssl.google-analytics.com/collect
07-23 12:52:50.539: D/SystemBroadcastService(13335): Received broadcast action=android.intent.action.PACKAGE_ADDED and uri=
07-23 12:52:50.719: W/ContextImpl(13335): Implicit intents with startService are not safe: Intent { act=com.google.android.gms.games.service.INTENT } android.content.ContextWrapper.startService:494 com.google.android.gms.games.service.GamesIntentService.a:101 com.google.android.gms.games.service.GamesIntentService.b:368
07-23 12:52:51.069: E/Icing(13335): Couldn't handle android.intent.action.PACKAGE_ADDED intent due to initialization failure.
07-23 12:53:48.669: W/GA-SERVICE(13335): Thread[Thread-315,5,main]: Using destination https://ssl.google-analytics.com/collect

我不知道上面的日志是不是因为我的应用程序出错了。这就是为什么我在这里发布这个。如果与主题不相关,您可以删除它或忽略它。我在谷歌或其他任何地方都没有找到任何解决我的错误的方法。这就是为什么我在这里寻求一点帮助。

这是我的 MainActivity:

MainActivity.java

package com.tonyjoseph.kra;

import com.google.android.gcm.GCMRegistrar;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

Controller aController;

// Asyntask
AsyncTask<Void, Void, Void> mRegisterTask;
public static String name;
public static String email,mobile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

aController = (Controller) getApplicationContext();


// Check if Internet present
if (!aController.isConnectingToInternet()) {

// Internet Connection is not present
aController.showAlertDialog(MainActivity.this,
"Internet Connection Error",
"Please connect to Internet connection", false);
// stop executing code by return
return;
}

// Getting name, email from intent
Intent i = getIntent();

name = i.getStringExtra("name");
email = i.getStringExtra("email");
mobile=i.getStringExtra("mobile");

// Make sure the device has the proper dependencies.
GCMRegistrar.checkDevice(this);

// Make sure the manifest permissions was properly set
//The error is in this line as mentioned by the logcat.
GCMRegistrar.checkManifest(this);

// Register custom Broadcast receiver to show messages on activity
registerReceiver(mHandleMessageReceiver, new IntentFilter(
Config.DISPLAY_MESSAGE_ACTION));

// Get GCM registration id
final String regId = GCMRegistrar.getRegistrationId(this);

// Check if regid already presents
if (regId.equals("")) {

// Register with GCM
GCMRegistrar.register(this, Config.GOOGLE_SENDER_ID);

} else {

// Device is already registered on GCM Server
if (GCMRegistrar.isRegisteredOnServer(this)) {

// Skips registration.
Toast.makeText(getApplicationContext(), "Already registered with GCM Server", Toast.LENGTH_LONG).show();

} else {

// Try to register again, but not in the UI thread.
// It's also necessary to cancel the thread onDestroy(),
// hence the use of AsyncTask instead of a raw thread.

final Context context = this;
mRegisterTask = new AsyncTask<Void, Void, Void>() {

@Override
protected Void doInBackground(Void... params) {

// Register on our server
// On server creates a new user
aController.register(context, name, email, regId,mobile);

return null;
}

@Override
protected void onPostExecute(Void result) {
mRegisterTask = null;
}

};

// execute AsyncTask
mRegisterTask.execute(null, null, null);
}
}

}
// Create a broadcast receiver to get message and show on screen
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {

String newMessage = intent.getExtras().getString(Config.EXTRA_MESSAGE);

// Waking up mobile if it is sleeping
aController.acquireWakeLock(getApplicationContext());

// Display message on the screen
//lblMessage.append(newMessage + "\n");

Toast.makeText(getApplicationContext(), "Got Message: " + newMessage, Toast.LENGTH_LONG).show();

// Releasing wake lock
aController.releaseWakeLock();
}
};

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
// Cancel AsyncTask
if (mRegisterTask != null) {
mRegisterTask.cancel(true);
}
try {
// Unregister Broadcast Receiver
unregisterReceiver(mHandleMessageReceiver);

//Clear internal resources.
GCMRegistrar.onDestroy(this);

} catch (Exception e) {
Log.e("UnRegister Receiver Error", "> " + e.getMessage());
}
super.onDestroy();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

我还在我的 AndroidManifest xml 文件中授予了以下权限。如下所示:

 <!-- Creates a custom permission so only this app can receive its messages. -->
<permission
android:name="com.tonyjoseph.kra.permission.C2D_MESSAGE"
android:protectionLevel="signature" />

<uses-permission android:name="com.tonyjoseph.kra.permission.C2D_MESSAGE" />
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

为了完整说明,我将展示 AndroidManifest.xml 文件:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tonyjoseph.kra"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="18" />

<application
android:name="com.tonyjoseph.kra.Controller"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppBaseTheme" >
<activity
android:name="com.tonyjoseph.kra.MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.tonyjoseph.kra.SplashScreen"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.tonyjoseph.kra.FirstUse"
android:label="@string/title_activity_first_use"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen">
</activity>
</application>

<uses-permission android:name="android.permission.INTERNET" />

<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

<!-- Creates a custom permission so only this app can receive its messages. -->
<permission
android:name="com.tonyjoseph.kra.permission.C2D_MESSAGE"
android:protectionLevel="signature" />

<uses-permission android:name="com.tonyjoseph.kra.permission.C2D_MESSAGE" />
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!-- Network State Permissions to detect Internet status -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- Permission to vibrate -->
<uses-permission android:name="android.permission.VIBRATE" />

最佳答案

终于,我找到了问题的答案。实际上我忘了在 androidmanifest 中包含接收器(广播接收器)。我添加到我的 AndroidManifest 中的代码是这样的:

 <receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>

<!-- Receives the actual messages. -->
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<!-- Receives the registration id. -->
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />

<category android:name="com.tonyjoseph.kra" />
</intent-filter>
</receiver>

添加此代码解决了我的问题,我能够将我的设备注册到服务器...

关于Android GCM 应用程序在我的 Android 应用程序中的 GCMRegistrar.checkManifest(this) 行强制关闭,出现未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24905039/

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