2013-02-26 1 views
0

에 변경알람 정보]를 확인하고 난 다음 코드를 사용하여 콘텐츠 제공 업체에서 제공 한 알람 정보를 검색하기 위해 노력하고 안드로이드 4.0

는 내가 쿼리 Get alarm infomation 에서 호기심 대답에서이 코드를 복사 나에게 오류 권한 거부를주고있다
final String tag_alarm = "tag_alarm"; 
Uri uri = Uri.parse("content://com.android.deskclock/alarm") 
Cursor c = getContentResolver().query(uri, null, null, null, null); 
Log.i(tag_alarm, "no of records are" + c.getCount()); 
Log.i(tag_alarm, "no of columns are" + c.getColumnCount()); 
if (c != null) { 
    String names[] = c.getColumnNames(); 
    for (String temp : names) { 
     System.out.println(temp); 
    } 
    if (c.moveToFirst()) { 
     do { 
      for (int j = 0; j < c.getColumnCount(); j++) { 
       Log.i(tag_alarm, c.getColumnName(j); 
         + " which has value " + c.getString(j)); 
      } 
     } while (c.moveToNext()); 
    } 
} 

그는 Nguyen의 코멘트에서 "이 코드를 Android 소스 코드에 임베드하고 이미지 파일을 실행하면"권한 거부 "오류를 전달하고 알람 정보를 검색 할 수 있습니다. 어쨌든 팁을 주셔서 감사합니다 :)"코드를 임베드하는 방법 안드로이드 소스 코드 및 이미지 파일을 실행 ?? 실행이 application.please

<provider android:name="AlarmProvider" 
       android:authorities="com.android.deskclock" 
       android:exported="false" /> 

AndroidManifest.xml에

의 콘텐츠 제공자의 정의를이 트릭을

답변

1

봐 설명으로 내 보낸이 거짓 난 항상 다음 코드 이클립스에서 프로젝트를 생성하고 설명하고 실행하십시오 이는 타사 앱이 액세스 할 수 없음을 의미합니다. 그 결과로 허가 거부.

방법 안드로이드 소스 코드의 코드를 포함하고 이미지 파일 그것은 당신이 (Google에서 제공) 안드로이드 소스를 수정 의미

를 실행합니다. 나는 그것이 귀하의 경우에 유용하다고 생각하지 않습니다.

sqlite 데이터베이스의 내용을 직접 수정하여 루팅 된 장치에서이 작업을 수행 할 수 있습니다. 나는 기존의 모든 안드로이드 플랫폼에서 작동 할 해결책이 없다고 생각합니다.

일반적으로 sqlite 데이터베이스 파일은 /data/data/app-package-name/databases/database-name이므로이 예제에서는 /data/data/com.android.deskclock/databases/com.android.deskclock 또는 유사해야합니다. 파일을 adb pull까지 가져 와서 SqliteExplorer을 사용하여 원하는 파일인지 확인할 수 있습니다. 이 DB 파일을 수정하는 방법은

, Using your own SQLite database in Android applications

+0

앱에서 표준 Android 앱에 설정된 모든 알람을 비활성화해야하므로 "content : //com.android.deskclock/alarm"URL을 사용하여 콘텐츠 제공 업체에서 사용 설정을 해제해야합니다. 그것을 달성 가이드 라인을 !! –

+0

sqlite 데이터베이스의 내용을 직접 수정하여 루팅 된 장치에서이 작업을 수행 할 수 있습니다. 나는 기존의 모든 안드로이드 플랫폼에서 작동 할 해결책이 없다고 생각합니다. – StarPinkER

+0

나는 루팅 된 장치에서 그렇게하고 싶습니다. 너 넥서스를 의미하거나 누가 표준 안드로이드 알람 앱을 바꿀 수 없습니까? 내 프로젝트의 AndroidManifest.xml 파일은 어디에 있나요? 같은 이름의 파일이 있지만 " " –

0

로를 확인 루트없이이 작업을 수행 할 수있는 방법이 없습니다 말했지만, 당신은 다음 알람이 때 모니터링 할 수있을 때 다음과 같은 값으로 값이 변경 :

Settings.System.getUriFor(Settings.System.NEXT_ALARM_FORMATTED).toString() 

다음 알람이있는 문자열이 표시됩니다.

0

제 생각에는 각 제조업체가 자체 시계 응용 프로그램을 구현했기 때문에 Android의 기본 AlarmClockApp가 각 제조업체에 따라 바뀌므로 Android Os가 제조업체에 의해 수정 된 경우 코드가 성공적으로 실행될 수 없습니다. . 이 경우 모든 장치를 처리 할 수 ​​없다고 생각합니다. 대신 장치 제조업체가 처리해야합니다.

<uses-permission android:name="com.sec.android.app.clockpackage.permission.READ_ALARM" /> 

그때까지 열린 우리당을 얻을 : 매니페스트에 권한을 추가

:

<provider 
     android:name=".alarm.AlarmProvider" 
     android:authorities="com.samsung.sec.android.clockpackage" 
     android:exported="true" 
     android:readPermission="com.sec.android.app.clockpackage.permission.READ_ALARM" 
     android:writePermission="com.sec.android.app.clockpackage.permission.WRITE_ALARM" > 
    </provider> 

그래서 우리는에 의해 삼성 기기에서 경보 데이터를 읽을 수 있습니다 : 삼성 기기와 , 그것은 ClockPackage와의 AndroidManifest를의 아래 :

Uri uri = Uri.parse("content://com.samsung.sec.android.clockpackage/alarm"); 

사용 Uri :

Cursor c = getContentResolver().query(uri, null, null, null, null); 
    if (c == null) { // that mean devices is not belong to Samsung manufacturer, 
        // we should use an other uri (don't for get to add permission) 
     AlarmLog.w("Can not read cursor"); 

    } 
    AlarmLog.i(tag_alarm, "no of records are " + c.getCount()); 
    AlarmLog.i(tag_alarm, "no of columns are " + c.getColumnCount()); 
    if (c != null) { 
     String names[] = c.getColumnNames(); 
     for (String temp : names) { 
      AlarmLog.d(tag_alarm, temp); 
     } 
     if (c.moveToFirst()) { 
      do { 
       for (int j = 0; j < c.getColumnCount(); j++) { 
        AlarmLog.i(tag_alarm, c.getColumnName(j) 
          + " which has value " + c.getString(j)); 
       } 
      } while (c.moveToNext()); 
     } 
    } 

희망자는 다른 제조업체의 코드를 받아 보시길 바랍니다.

관련 문제