0

このアプリをテストしている間、Forcecloseエラーが発生し続けます。アプリは正常に開きますが、3〜4秒後に強制終了エラーダイアログボックスが表示されます。コードが含まれています。どんな助けでもありがたいです。ありがとう

マニフェスト

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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <receiver android:name=".Main" >
        <intent-filter>
            <action android:name="android.content.Intent.ACTION_BATTERY_CHANGED" />
        </intent-filter>
    </receiver>

    <activity
        android:name="com.cy.headset.Main"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Javaコード

package com.cy.headset;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class Main extends BroadcastReceiver{

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

    Toast.makeText(context, "Headphone connected", Toast.LENGTH_LONG).show();

}}

XMLUIファイル

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_margin="10dp"
    android:layout_marginTop="151dp"
    android:text="@string/hello_world"
    android:textAlignment="center" />

4

3 に答える 3

1

Main.javaであるBroadcastReceiverクラスのパッケージは何ですか?

<receiver android:name=".Main" >
    <intent-filter>
        <action android:name="android.content.Intent.ACTION_BATTERY_CHANGED" />
    </intent-filter>
</receiver>

com.cy.headsetではないでしょうか?Main.javaであるメインアクティビティとの競合になるため

これには2つの解決策があると思います。マニフェストでレシーバーのパッケージを指定します。

例:

<receiver android:name="com.package.name.Main" >
    <intent-filter>
        <action android:name="android.content.Intent.ACTION_BATTERY_CHANGED" />
    </intent-filter>
</receiver>

または、レシーバーをMain.javaであるメインアクティビティの同じパッケージにしたい場合は、レシーバーの名前を変更します

例:

<receiver android:name=".BatteryChange" >
    <intent-filter>
        <action android:name="android.content.Intent.ACTION_BATTERY_CHANGED" />
    </intent-filter>
</receiver>

<activity
    android:name="com.cy.headset.Main"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

それを行う別の方法はです。

<receiver android:name="com.cy.headset.BatteryChange" >
    <intent-filter>
        <action android:name="android.content.Intent.ACTION_BATTERY_CHANGED" />
    </intent-filter>
</receiver>

<activity
    android:name="com.cy.headset.Main"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
于 2013-02-22T20:06:23.820 に答える
0

アクティビティBroadcastReceiverの両方をであると宣言しますcom.cy.headset.Main。これは機能しません。

アプリがインストールされると、Androidはと呼ばれるアクティビティを起動しようとしますMainが、代わりにBroadcastReceiverを見つけます。

これらを2つの異なるクラスに分けます。1つはActivityを拡張し、もう1つはBroadcastReceiverを拡張します。

于 2013-02-22T17:04:04.340 に答える
0
<receiver android:name=".Main" >
    <intent-filter>
        <action android:name="android.content.Intent.ACTION_BATTERY_CHANGED" />
    </intent-filter>
</receiver>

<activity
    android:name="com.cy.headset.MainActivity" <<Change it to MainActivity
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

レシーバーとアクティビティ名を同じに定義し、両方が同じパッケージcom.cy.headsetにあるため、一方の名前を変更するか、別のパッケージで定義して完全修飾パッケージ名を付けます。

例:レシーバーがcom.cv.headset.receiverにある場合は、次のようにマニフェストに書き込みます。

<receiver android:name="com.cv.headset.receiver.Main" >
    <intent-filter>
        <action android:name="android.content.Intent.ACTION_BATTERY_CHANGED" />
    </intent-filter>
</receiver>
于 2013-02-22T17:06:19.457 に答える