2013-07-31 1 views
0

번호를 다이얼 할 수있는 위젯 앱을 만들고 싶습니다. 위젯 구성을 사용하여 위젯을 처음으로 드래그 앤 드롭 할 때 번호를 설정할 수 있습니다.하지만 전화가 다시 시작되면 위젯이 기본 번호를 다시 사용합니다. 입력 된 phonenumber를 공유 환경 설정에 저장하여 사용자의 전화 번호를 저장하지만 이클립스에서는 onUpdate에서 getSharedPreferences를 사용할 수 없다고 말합니다. 다른 방법으로 수행 할 수 있습니까?전화 재시작 후 위젯 구성을 유지하는 방법은 무엇입니까?

어떻게해야합니까?

내 코드 :

public class Main extends AppWidgetProvider { 
    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 
     // TODO Auto-generated method stub 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 
     for(int i=0 ; i<appWidgetIds.length ; i++) 
     { 
      SharedPreferences details = getSharedPreferences("OPERATOR", 0); 
      int appWidgetId = appWidgetIds[i]; 
      String phNumber = "5554574"; 

      Intent intent = new Intent(Intent.ACTION_CALL); 
      intent.setData(Uri.parse("tel:"+(phNumber))); 
      PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); 

      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main); 
      views.setOnClickPendingIntent(R.id.button1, pending); 

      appWidgetManager.updateAppWidget(appWidgetId, views); 

     } 
    } 
} 
+0

브로드 캐스트 수신기에서 메서드를 호출하십시오. 그리고 Manifest- 에서 <사용 - 권한 안드로이드 : 이름 = "android.permission.RECEIVE_BOOT_COMPLETED"/> –

답변

0

사용 :

SharedPreferences details = context.getSharedPreferences("OPERATOR", 0); 

된 SharedPreferences는 컨텍스트로부터 획득 할 수있다. onUpdate (...)는 컨텍스트를 제공합니다.

변경된 코드는 다음과 같아야합니다

public class Main extends AppWidgetProvider { 
    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 
     // TODO Auto-generated method stub 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 
     for(int i=0 ; i<appWidgetIds.length ; i++) 
     { 
      SharedPreferences details = context.getSharedPreferences("OPERATOR", 0); 
      int appWidgetId = appWidgetIds[i]; 
      String phNumber = "5554574"; 

      Intent intent = new Intent(Intent.ACTION_CALL); 
      intent.setData(Uri.parse("tel:"+(phNumber))); 
      PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); 

      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main); 
      views.setOnClickPendingIntent(R.id.button1, pending); 

      appWidgetManager.updateAppWidget(appWidgetId, views); 

     } 
    } 
} 

그것을 시도하십시오.

+0

나는 내 공유 같은 환경 설정 저장 : – mohammad

+0

된 SharedPreferences 정보 = getSharedPreferences ("연산자를", 0); SharedPreferences.Editor editor = details.edit(); editor.putString ("operator", "hamrah"); editor.commit(); – mohammad

+0

사용하는 것이 사실입니까? – mohammad

0

AppWidgetProvider는 컨텍스트가 아닙니다. 하지만 종종 응용 프로그램의 컨텍스트를 도달하는 정적 메서드를 만들 수 있습니다, 다음 할이

<application android:name="com.example.MyApplication"> 

</application> 

다음 다음 클래스

public class MyApplication extends Application{ 

    private static Context context; 

    public void onCreate(){ 
     super.onCreate(); 
     MyApplication.context = getApplicationContext(); 
    } 

    public static Context getAppContext() { 
     return MyApplication.context; 
    } 
} 

을 수행 할 수 있습니다 쓰기 다음

안드로이드 매니페스트 파일 선언에서

 SharedPreferences details = MyApplication.getAppContext().getSharedPreferences("OPERATOR", 0); 

나는 생을 보장 할 수 없습니다 아직 그렇게 위젯 근무 한 적이없는 사용하십시오 그것의 해결책이 효과가 있기를 바랍니다!

+0

불행히도 작동하지 않습니다 – mohammad

+0

어떤 종류의 오류가 발생합니까? –

관련 문제