2016-07-27 3 views
4

특정 질문이며 이전에 Android 개발을 조금했으나 시스템 관리에 깊이 관여하지 않았습니다.Android 개발 : 전화 앱 활동에 초점이 맞춰지면 키보드의 바로 가기가 연결됩니다.

그래서 백그라운드로 실행되는 앱을 만들고 (이 부분은 정상입니다) 전화 앱 소프트웨어 키보드에서 특수 단축키 (# 123 * 6)를 입력하면 자동으로 앱 활동을 시작해야합니다. 전화로.

가능한 경우 알려주십시오. 그렇다면 사용할 API/구성 요소는 무엇입니까? 웹에서 관련있는 것을 찾을 수 없습니다.

+0

입력 장치 주변에는 많은 보안이 있지만 액세스 가능성 기능과 관련된 많은 불안감이 있습니다. 암호 관리자가 사용합니다. 자세한 정보는 [접근성 서비스 구축] (https://developer.android.com/guide/topics/ui/accessibility/services.html)을 확인하십시오. 질문 덕분에, 나는 그것을 너무 체크 아웃하려고합니다. –

+0

['AccessibilityEvent'] (https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html) 페이지에서 'EditText'에서 변경된 내용에 응답 할 수있는 텍스트 변경 이벤트가 표시됩니다 (비밀 번호 상자 tho). 당신이 요구 한 것이 정확하지는 않지만, 도움이 될 수 있습니다. "이유"에 따라 일반적인 제스처 수신기도 유용 할 수 있습니다. –

+0

나는 나의 필요를 채워주는 이들 주제를 발견했다 : http://stackoverflow.com/questions/11724192/make-my-app-launch-when-secret-code-entered and http://stackoverflow.com/questions/9769166/프로그래밍 방식으로 enter-secret-code-like-4636-on-android. 그러나 나는 비밀 코드로 활동을 시작하지 못했습니다. – Alex

답변

1

좋아요. 이제 마침내 HTC 장치에서 작동합니다. 사실은

단순히 이 ... 비밀 코드에 반응하는 것 같다하지 않는 삼성 휴대 전화입니다이 매니페스트 :

내 서비스는 단순히 안드로이드 M에 대한 올바른 권한을 검사한다
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MenuBrowser" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <service 
      android:name=".ShortcodeService" 
      android:exported="false"> 
     </service> 

     <receiver 
      android:name=".ShortcodeReceiver" 
      android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SECRET_CODE" /> 
       <data android:scheme="android_secret_code" android:host="1992" /> 
      </intent-filter> 
     </receiver> 
</application> 

(6.0) 보안이 조금 바뀌었기 때문입니다. 이제 응용 프로그램 런타임 중에는 설치시가 아니라 실행 중에 권한을 선언해야합니다.

내 활동 :

public class MenuBrowser extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("USSDBrowser", "Start app"); 

     //if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.PROCESS_OUTGOING_CALLS}, 10); 

     Intent serviceIntent = new Intent(this.getApplicationContext(), ShortcodeService.class); 
     startService(serviceIntent); 

     //setContentView(R.layout.activity_menu_browser); 
     finish(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_menu_browser, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

그리고 내 수신기은 다음과 같이이다 :

public class ShortcodeReceiver extends BroadcastReceiver { 

    private static String defaultCode = "1992"; 

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

     Log.d("USSDBrowser", "Intent received"); 

     if(intent.getAction().equals("android.provider.Telephony.SECRET_CODE")) { 
      String code = intent.getDataString(); 

      if(code.equals("android_secret_code://" + defaultCode)) { 
       Log.d("USSDBrowser", "Code received !!! "); 
      } 
      //Intent in = new Intent(context, MenuBrowser.class); 
      //context.startActivity(in); 

      Toast.makeText(context, "You typed a shortcode, hype !", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

하지만 지금은 그 테스트는 HTC 하나 S (4.1.1 안드로이드)을 위해 일하고있어 및 Aquaris E4 (Android 4.4.2)가 있습니다.

비밀 코드 의도를 포착하지 않는 테스트 된 전화는 Samsung Galaxy S4 및 Galaxy S6 (Android 6.0)입니다.

관련 문제