0

重複の可能性:
Android の起動時にサービスを開始しようとしています

ブロードキャストレシーバー

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class StartActivityAtBoot extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
            Intent i = new Intent(context, CompareIMSI.class);
            context.startService(i);
        }
    }
}

CompareSIM.java

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.widget.Toast;

public class CompareIMSI extends Service{

    Context context;
    TelephonyManager operator;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();
        //compareSIM();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        compareSIM();
    }

    public void compareSIM(){

        final String STORAGE = "Storage";
        SharedPreferences unique = getSharedPreferences(STORAGE, 0);
        final String storedIMSI = unique.getString("simIMSI", "");
        final String currentIMSI = getSubscriberId().toString();

        if (!storedIMSI.equals(currentIMSI)){
            Intent i = new Intent(CompareIMSI.this, ScreenLockActivity.class);
            startActivity(i);
        }
    }

    public String getSubscriberId(){

        String IMSI = null;
        String serviceName = Context.TELEPHONY_SERVICE;
        TelephonyManager m_telephonyManager = (TelephonyManager) getSystemService(serviceName);
        IMSI = m_telephonyManager.getSubscriberId();
        return IMSI;
    }
}

起動時にアプリケーションにcompareSIMサービスを開始させたいのですが、起動中に、現在接続されているSIMカードIMSIが取得され、すでに保存されているIMSIと一致するため、このサービスが実行されます。それらが異なると、ユーザーはログインレイアウト。起動時にこれを実行したいのですが、実行できませんでした...コーディングについて親切にアドバイスしてください、ありがとう

4

3 に答える 3

2

BOOT でサービスを指定するには、次の手順を実行します。

ステップ 1: AndroidManifest.xml で、BOOT_COMPLETED 権限を次のように追加します。

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

ステップ 2: AndroidManifest.xml で、レシーバーを次のように登録します。

<receiver android:name=".StartActivityAtBoot" android:label="@string/app_name"> 
    <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</receiver>

ステップ 3: AndroidManifest.xml で、サービスを次のように登録します。

<service android:name=".CompareIMSI"> </service>

ステップ 3: StartActivityAtBoot で次のようにサービスを開始します。

    public class StartActivityAtBoot extends BroadcastReceiver
{
    static final String ACTION = "android.intent.action.BOOT_COMPLETED";
    public void onReceive(Context context, Intent intent) 
    {
        if (intent.getAction().equals(ACTION)) 
        {
                  context.startService(new Intent(context, 
                  CompareIMSI.class), null);
             Toast.makeText(context, "CompareIMSI service has started!", Toast.LENGTH_LONG).show();
        }
    }
}

これはすべて、Boot.Thanks でのサービスの開始に関するものです。

于 2012-05-21T16:58:51.630 に答える
0

androidManifest ファイルを確認してください。androidManifest ファイルにレシーバーを追加する必要があります。

  <receiver android:name=".......StartActivityAtBoot" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
    </receiver>
于 2012-05-21T16:53:45.313 に答える
0

次のように、BroadcastReceiver を Android マニフェストに登録する必要があります。

<receiver android:name=".StartActivityAtBoot">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

また、マニフェストに次の権限があることを確認してください。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
于 2012-05-21T16:50:13.360 に答える